After consulting Apple documentation and working with some a11y experts,
we've found that aggregating objects that have a11y labels but are not
themselves interactable is significantly preferred for these users.
It makes it much quicker to navigate scrolling content if VoiceOver only
stops to select entire cells, and then allows drilling down into the cell
to select individual components. This implementation achieves that behavior.
We should consider enabling isAccessibilityContainer by default on ASCellNode.
This would be an improvement for 95% of a11y use cases. Aggregation can be
enabled or disabled on any node.
* [ASImageNode] Enable .clipsToBounds by default (fix .cornerRadius, GIFs overflow).
We've seen a number of bugs reported over time that .cornerRadius didn't work on
ASNetworkImageNode. This wasn't much of a concern because cornerRadius is very
inefficient anyway, and there are better ways to round corners, but it should
certainly work.
It turns out that clipsToBounds has been off for images, and this ultimately
was behind another issue recently seen wehre decoded GIFs would spill outside
the bounds area to overlap nearby content.
Although there is some risk of behavior change from this, I think the risk
is fairly small, and in most cases it will probably fix behaviors in a way
that doesn't cause problems for the app.
We should consider if this property should be on for all ASDisplayNodes,
but for now it would be a great step to be confident it's on for all
ASImageNodes.
* Update changelog for ImageNode Clipping.
* Update corner-rounding.md
If I understand right, both Precomposited corners techniques uses `[path clip]`, right? If so, I think it will be better to move it to the general description of the section, as currently it seems as only the second option uses `[path clip]`.
* Update corner-rounding.md
Improved positioning.
* Update corner-rounding.md
Syntax consistency: Changed `off-screen` to `offscreen`, as both syntaxes currently appears in the text.
- Update header documentation to make it clear how animatinoSpeed and animationProgress interact
- Leave fixes in there that stop reversed animations "snapping" back
- The progress can be calculated basd on negative speed
+ The end frame would be a progress of 0 and the start frame a progress of 1
+ Recalculate progress when the speed changes, otherwise a "jump" will be seen when restarting animation
- The frame for the progress can be calculated using the newly inverted progress
+ Determine the absolute progress based on current progress and determine which frame to use based on animation speed
- This fixes issues of animations playing with negative speeds "bouncing" back to their final position
which was caused by the final frame being calculated based on a completed progress of 1 which then did not take into
account the negative animation speed.
- During the first layout calculation, measure more than just elements in the visible viewport.
- Remove unnecessary params in `-[ASCollectionLayoutState getAndRemoveUnmeasuredLayoutAttributesPageTableInRect`.]
- The progress can be calculated basd on negative speed
+ The end frame would be a progress of 0 and the start frame a progress of 1
+ Recalculate progress when the speed changes, otherwise a "jump" will be seen when restarting animation
- The frame for the progress can be calculated using the newly inverted progress
+ Determine the absolute progress based on current progress and determine which frame to use based on animation speed
- This fixes issues of animations playing with negative speeds "bouncing" back to their final position
which was caused by the final frame being calculated based on a completed progress of 1 which then did not take into
account the negative animation speed.