From 5acf0856b447cf31e8b5bdd8ac8567977e21965e Mon Sep 17 00:00:00 2001 From: CI Date: Thu, 7 Nov 2024 13:55:43 +0100 Subject: [PATCH] feat: add responsive layouts to iOS and JS --- docs/types.md | 1 + example/ios/Assets/layout_test.riv | Bin 0 -> 711 bytes example/ios/Assets/layouts_demo.riv | Bin 0 -> 62288 bytes example/ios/Podfile.lock | 8 +- .../project.pbxproj | 15 +++- example/ios/RiveReactNativeExample/Info.plist | 28 +++--- example/src/App.tsx | 2 + example/src/Home.tsx | 8 ++ example/src/ResponsiveLayout.tsx | 81 ++++++++++++++++++ ios/RNFit.swift | 3 + ios/RiveReactNativeView.swift | 10 +++ ios/RiveReactNativeViewManager.m | 1 + rive-react-native.podspec | 2 +- src/Rive.tsx | 4 + src/types.ts | 1 + 15 files changed, 143 insertions(+), 21 deletions(-) create mode 100644 example/ios/Assets/layout_test.riv create mode 100644 example/ios/Assets/layouts_demo.riv create mode 100644 example/src/ResponsiveLayout.tsx diff --git a/docs/types.md b/docs/types.md index 0535382..bcf0282 100644 --- a/docs/types.md +++ b/docs/types.md @@ -11,6 +11,7 @@ export enum Fit { FitHeight = 'fitHeight', None = 'none', ScaleDown = 'scaleDown', + Layout = 'layout', } ``` diff --git a/example/ios/Assets/layout_test.riv b/example/ios/Assets/layout_test.riv new file mode 100644 index 0000000000000000000000000000000000000000..205f4fb806c3085148d567d6928205aa38eef2fd GIT binary patch literal 711 zcmah_OKTHR7(L(IbD0pStuf+qvak!?Wg*ptZ6~RMpdh~XQ3Doy5wa0oq;Ii{6hy2G z!G&AJpI{{0w%K%>cGH(lr!;}KJN@p2u7q~roI9NFo^Q^ayEh+R_wiwVuwpB$%O9?A z&em+3Z8OCU?sA+5rp1;la)w)MvTFA@$#q7IOoL#HbMNONJ-~(Er-7ffy1>V;z7ZYX$VaBPC14^fl^?wt9P&O%B)PI(3 zN{g~bX;Yvc_?Bt6>73j2Mzi6qqd=2|NZG#szI94%zS09~yIRinXS3NjDNg7(ZHcr^C`1AL5Cj9s`=if` u&qiMqGg(|7=)G4il#7|$g~w03($)9k-zvN=mUKLX@RJw}Vi?yx3h)p6>8Q5= literal 0 HcmV?d00001 diff --git a/example/ios/Assets/layouts_demo.riv b/example/ios/Assets/layouts_demo.riv new file mode 100644 index 0000000000000000000000000000000000000000..0266bf413392925f5fc6e9f0782675f6534f563e GIT binary patch literal 62288 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 C9Y@Om literal 0 HcmV?d00001 diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index da0e5e6..960e4c1 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -489,8 +489,8 @@ PODS: - React-perflogger (= 0.72.7) - rive-react-native (8.0.0): - React-Core - - RiveRuntime (= 6.2.1) - - RiveRuntime (6.2.1) + - RiveRuntime (= 6.3.3) + - RiveRuntime (6.3.3) - RNCMaskedView (0.2.9): - React-Core - RNCPicker (1.16.8): @@ -744,8 +744,8 @@ SPEC CHECKSUMS: React-runtimescheduler: 7649c3b46c8dee1853691ecf60146a16ae59253c React-utils: 56838edeaaf651220d1e53cd0b8934fb8ce68415 ReactCommon: 5f704096ccf7733b390f59043b6fa9cc180ee4f6 - rive-react-native: 555505d7a84182ea159d5856bcda8ba01057f256 - RiveRuntime: 23b2f53b5439c38f716b2f1a5d2a9e3a24683877 + rive-react-native: ddcb4870e2cded3eab74b3b2a05303eedf94eec7 + RiveRuntime: 4555cc58cf39f41c84b4152f2272b18068da43a1 RNCMaskedView: 949696f25ec596bfc697fc88e6f95cf0c79669b6 RNCPicker: 0991c56da7815c0cf946d6f63cf920b25296e5f6 RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 diff --git a/example/ios/RiveReactNativeExample.xcodeproj/project.pbxproj b/example/ios/RiveReactNativeExample.xcodeproj/project.pbxproj index 96ddd83..2d32779 100644 --- a/example/ios/RiveReactNativeExample.xcodeproj/project.pbxproj +++ b/example/ios/RiveReactNativeExample.xcodeproj/project.pbxproj @@ -34,6 +34,8 @@ E5FC4EAA2ABB975100D98158 /* rating.riv in Resources */ = {isa = PBXBuildFile; fileRef = E5FC4EA92ABB975100D98158 /* rating.riv */; }; F8AA4CA42C0F3FDB00C1A5FF /* runtime_nested_inputs.riv in Resources */ = {isa = PBXBuildFile; fileRef = F8AA4CA32C0F3FDB00C1A5FF /* runtime_nested_inputs.riv */; }; F8AA4CA52C0F3FDB00C1A5FF /* runtime_nested_inputs.riv in Resources */ = {isa = PBXBuildFile; fileRef = F8AA4CA32C0F3FDB00C1A5FF /* runtime_nested_inputs.riv */; }; + F8E2789E2CDCD6A200FAA8EF /* layouts_demo.riv in Resources */ = {isa = PBXBuildFile; fileRef = F8E2789D2CDCD6A200FAA8EF /* layouts_demo.riv */; }; + F8E278A22CDCDAFA00FAA8EF /* layout_test.riv in Resources */ = {isa = PBXBuildFile; fileRef = F8E278A12CDCDAFA00FAA8EF /* layout_test.riv */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -104,6 +106,8 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; F8AA4CA32C0F3FDB00C1A5FF /* runtime_nested_inputs.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = runtime_nested_inputs.riv; sourceTree = ""; }; + F8E2789D2CDCD6A200FAA8EF /* layouts_demo.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = layouts_demo.riv; sourceTree = ""; }; + F8E278A12CDCDAFA00FAA8EF /* layout_test.riv */ = {isa = PBXFileReference; lastKnownFileType = file; name = layout_test.riv; path = ../../../../../../rive/rive/packages/runtime_wasm/js/examples/_frameworks/layout_example/assets/layout_test.riv; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -250,6 +254,8 @@ 9D4FE60A26493B460098BF6A /* Assets */ = { isa = PBXGroup; children = ( + F8E278A12CDCDAFA00FAA8EF /* layout_test.riv */, + F8E2789D2CDCD6A200FAA8EF /* layouts_demo.riv */, C3C07471283BE07300E8EB33 /* hero_editor.riv */, E554409A2A79DC8100D550DE /* hello_world_text.riv */, 042FD22626B81BD1004556A3 /* constrained.riv */, @@ -363,6 +369,7 @@ TestTargetID = 13B07F861A680F5B00A75B9A; }; 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = V7DMK4826J; LastSwiftMigration = 1120; }; 2D02E47A1E0B4A5D006451C7 = { @@ -421,9 +428,11 @@ 9DBF1CC52684937E0008391A /* v6_file.riv in Resources */, 9D4FE6122649427F0098BF6A /* bird.riv in Resources */, E554409B2A79DC8100D550DE /* hello_world_text.riv in Resources */, + F8E278A22CDCDAFA00FAA8EF /* layout_test.riv in Resources */, 9D879D0D265BF2A400D01424 /* ui_swipe_left_to_delete.riv in Resources */, E5A17A90299AA0F5008CC433 /* avatars.riv in Resources */, 9D879D0926578A5400D01424 /* loopy.riv in Resources */, + F8E2789E2CDCD6A200FAA8EF /* layouts_demo.riv in Resources */, C3C07472283BE07300E8EB33 /* hero_editor.riv in Resources */, E59C19102B07F6FE002F0CBA /* nested_menu.riv in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, @@ -716,6 +725,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = V7DMK4826J; ENABLE_BITCODE = NO; INFOPLIST_FILE = RiveReactNativeExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -724,7 +734,7 @@ "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.rivereactnative; + PRODUCT_BUNDLE_IDENTIFIER = gordon.example.rivereactnative; PRODUCT_NAME = RiveReactNativeExample; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -739,6 +749,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = V7DMK4826J; INFOPLIST_FILE = RiveReactNativeExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -746,7 +757,7 @@ "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.rivereactnative; + PRODUCT_BUNDLE_IDENTIFIER = gordon.example.rivereactnative; PRODUCT_NAME = RiveReactNativeExample; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; diff --git a/example/ios/RiveReactNativeExample/Info.plist b/example/ios/RiveReactNativeExample/Info.plist index 7d281b5..3790fe6 100644 --- a/example/ios/RiveReactNativeExample/Info.plist +++ b/example/ios/RiveReactNativeExample/Info.plist @@ -39,20 +39,6 @@ NSLocationWhenInUseUsageDescription - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - UIAppFonts AntDesign.ttf @@ -72,5 +58,19 @@ Zocial.ttf Fontisto.ttf + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + diff --git a/example/src/App.tsx b/example/src/App.tsx index 8059eef..bd108b2 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -22,6 +22,7 @@ import { RiveRendererAndroid, RiveRendererIOS, } from 'rive-react-native'; +import ResponsiveLayout from './ResponsiveLayout'; const Stack = createStackNavigator(); @@ -57,6 +58,7 @@ function App() { + diff --git a/example/src/Home.tsx b/example/src/Home.tsx index c4fcea1..a967be1 100644 --- a/example/src/Home.tsx +++ b/example/src/Home.tsx @@ -39,6 +39,14 @@ export default function Home({ navigation }) { Layout + +