-
Notifications
You must be signed in to change notification settings - Fork 24.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added border curve style prop ("Squircle" effect - iOS only) #32017
Conversation
Base commit: 8fef520 |
Base commit: 8fef520 |
Relates to this PR: facebook/react-native#32017
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about naming it borderCurve
(borderRadiusCurve
? cornerCurve
? borderRadiusStyle
?) with value 'circular' | 'continuous'
.
cc @yungsters
React/Views/RCTViewManager.m
Outdated
RCT_CUSTOM_VIEW_PROPERTY(cornerSmoothing, BOOL, RCTView) | ||
{ | ||
if ([RCTConvert BOOL:json]) { | ||
view.layer.cornerCurve = @"continuous"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use kCACornerCurveContinuous
/ kCACornerCurveCircular
React/Views/RCTViewManager.m
Outdated
@@ -259,6 +259,14 @@ - (RCTShadowView *)shadowView | |||
view.removeClippedSubviews = json ? [RCTConvert BOOL:json] : defaultView.removeClippedSubviews; | |||
} | |||
} | |||
RCT_CUSTOM_VIEW_PROPERTY(cornerSmoothing, BOOL, RCTView) | |||
{ | |||
if ([RCTConvert BOOL:json]) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cornerCurve
seems to be available on iOS 13+ only. You can add if (@available(iOS 13.0, *)) {
so it does nothing on older versions.
Sounds good to me.
|
@janicduplessis is it normal that the CI fails here ? Thanks |
I think its fine, failures don't seem related to your changes. LGTM thanks for the PR!! @yungsters Can you import this? |
@yungsters has imported this pull request. If you are a Facebook employee, you can view this diff on Phabricator. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks so much for working on this! looking real snazzy - just have one change i'd like to be made.
@philIip Could you have a look at this again? seems like all feedback have been addressed. |
@janicduplessis @philIip quick bump on this one, looks like the
Any help on what should I do next to get this feature merged? Thanks! |
I think this commit can help, 7b9490b Just move the change to |
thanks @giautm |
Summary: <!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? --> NOTE: PR is based on #32017 which went stale for quite a long time but can now safely be closed ![](https://preview.redd.it/nuvl4746ys471.png?width=960&crop=smart&auto=webp&s=084a517a645364ac246b70b7fa8e0f2470cc7af3) Since iOS 13+, it is possible to change the corner curve property on iOS in order to smoothen border radius and make it more "rounded" (also called "squircle") Here's an [article](https://medium.com/arthurofbabylon/a-smooth-corner-radius-in-ios-54b80aa2d372) explaining in details what it is. This property is also built in figma, but currently there is no way to implement this directly with react-native despite it being available natively on iOS. Many open source react-native libraries were created in order to simulate this behaviour: [react-native-super-ellipse-mask](https://github.com/everdrone/react-native-super-ellipse-mask) [react-native-squircle-view](https://github.com/everdrone/react-native-squircle-view) [react-native-figma-squircle](https://github.com/tienphaw/react-native-figma-squircle) But they rely on creating an SVG shape with the smoothed corners and masking the view behind. This makes it not very performant (flickering on mounting was a common side-effect) This PR aims at implementing the property natively. PR for the docs update: facebook/react-native-website#2785 ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://github.com/facebook/react-native/wiki/Changelog --> [iOS] [Added] - Added `borderCurve` style prop for smooth border radius (squircle effect) Pull Request resolved: #33783 Test Plan: We used the RNTester app and added an example with `cornerCurve ` set to `'continuous'` (only on iOS). As the difference is quite subtle, we also made some more tests to better illustrate the difference (these are not in the RN-tester app): ![IMG_0810](https://user-images.githubusercontent.com/19872411/133893536-26207c53-aade-4583-9eef-7a1739b6907b.PNG) We overlapped two views with `position: absolute`, the one in the background has a red background and has `cornerRadius` set to `false`, and the one in the foreground is set to `true`. We can clearly see where the borders differs on the corners. Reviewed By: sammy-SC Differential Revision: D37883631 Pulled By: cipolleschi fbshipit-source-id: 09f06de9628fa326323eba63875de30102c4a59e
Summary
Since iOS 13+, it is possible to change the corner curve property on iOS in order to smoothen border radius and make it more "rounded" (also called "squircle")
Here's an article explaining in details what it is.
This property is also built in figma, but currently there is no way to implement this directly with react-native despite it being available natively on iOS.
Many open source react-native libraries were created in order to simulate this behaviour:
react-native-super-ellipse-mask
react-native-squircle-view
react-native-figma-squircle
But they rely on creating an SVG shape with the smoothed corners and masking the view behind. This makes it not very performant (flickering on mounting was a common side-effect)
This PR aims at implementing the property natively.
PR for the docs update: facebook/react-native-website#2785
Changelog
[iOS] [Added] - Added
cornerCurve
style prop to smoothen the border radius (squircle effect)Test Plan
We used the RNTester app and added an example with
cornerCurve
set to'continuous'
(only on iOS).As the difference is quite subtle, we also made some more tests to better illustrate the difference (these are not in the showcase app):
We overlapped two views with
position: absolute
, the one in the background has a red background and hascornerRadius
set tofalse
, and the one in the foreground is set totrue
. We can clearly see where the borders differs on the corners.