Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
[Draft] Waiting for 2021
Summary
This PR replaces the use of
masks
to create rounded corners. Instead, it usesview.layer.maskedCorners
andview.layer.cornerCurve
where iOS will only mask the corners of the view. This solution prevents offscreen rendering, this is a problem when applied against complex lists.Side Effects
Indeed these changes will make the component look odd on iOS 12 and below. But there are compelling reasons described below (explanation has to be improved).
Reason
I noticed a slow performance of this library when applied against a complex list. Since this is just a draft, I will improve and add examples of how the performance has been improved.
Here is the example before and after:
Note that Apple does the same with their
UISegmentedControl
and while the `UIViewController transition in devices with rounded borders in the screen.I can see a massive improvement in complex subviews (i.e.
UITableView
). The component used to be choppy, probably around 30 fps with intermittent frames locked. With this new version it's stuck at 60 fps and runs smooth.Requirements (place an
x
in each[ ]
)I've read and understood the Contributing Guidelines and have done my best effort to follow them.
I've read and agree to the Code of Conduct.
I've written tests to cover the new code and functionality included in this PR.