* [ASCollectionView] Ensure -invalidateFlowLayoutDelegateMetrics is called for UIKit passthrough cells.
This allows rotation to work properly when rotating UIKit passthrough
cells that need to change width.
* [ASCollectionView] No need to verify node is still in model to handle view-only notifications.
* [ASCollectionView] Improve performance and behavior of rotation / bounds changes.
See #430 for details.
* Edit CHANGELOG.md
* [ASDataController] Implement -relayoutAllNodesWithInvalidationBlock:, to flush the ASMainSerialQueue before -invalidateLayout is called.
* Don't set download results if no longer in preload range. (#606)
Good catch by @djblake, if you scroll fast enough, you leave images
set on the image node because didExitPreloadRange (which would have
cleared it) was already called.
* Animated WebP support (#605)
* Updating to support animated WebP
* Fix a deadlock with display link
* Fix playhead issue.
* Fix up timing on iOS 10 and above
* Don't redraw the same frame over and over
* Clear out layer contents if we're an animated GIF on exit range
* Clear out cover image on exit of visible range
* Don't set cover image if we're no longer in display range.
* Don't clear out image if we're not an animated image
* Only set image if we're not already animating
* Get rid of changes to podfile
* Add CHANGELOG entry
* Update license
* Update PINRemoteImage
* Remove commented out lines in example
* [ASDataController] Add nullable specifier to invalidationBlock for relayout of nodes.
* Add unit test
* Make sure TextKit components can calculate size in background without upsetting Main Thread Checker
- Add a new thread-safe text view bounds.
- Temporary components stack doesn't have a text view so it can be safely deallocated off main.
* Add ASTextKitComponentsTextView
* Remove unnecessary change
* Fix minor mistake
* ASTextKitComponentsTextView has only 1 initializer
* Minor change
* Switch to atomic property
* Remove manual synthesization
* Updating to support animated WebP
* Fix a deadlock with display link
* Fix playhead issue.
* Fix up timing on iOS 10 and above
* Don't redraw the same frame over and over
* Clear out layer contents if we're an animated GIF on exit range
* Clear out cover image on exit of visible range
* Don't set cover image if we're no longer in display range.
* Don't clear out image if we're not an animated image
* Only set image if we're not already animating
* Get rid of changes to podfile
* Add CHANGELOG entry
* Update license
* Update PINRemoteImage
* Remove commented out lines in example
Good catch by @djblake, if you scroll fast enough, you leave images
set on the image node because didExitPreloadRange (which would have
cleared it) was already called.
* [ASCollectionView] Fix index space translation of Flow Layout Delegate methods.
This includes a few other cleanups, including overflow of signed integer indices.
* [ASCollectionView] Improve code sharing of UIKit size method calls; ensure delegate invalidation re-fetches supplementary sizes too.
* [ASCollectionView] Final method ordering and doc-comment for new _sizeForUIKitCellWithKind:atIndexPath: method.
* [PINCache] Set a default .byteLimit to reduce disk usage & startup time.
This default is fairly low - only 20MB - but for most apps with images
in the size range of 10-50KB, this is still 400-1000 images.
Once some optimizations land to PINCache, we'll match the PINCache
default of 50MB to ensure the default better serves users with larger
objects in the cache.
Apps should preferably set their own byteLimit to an optimal value.
@garrettmoon - one interesting question for us is the best place to
set .byteLimit as an app. Digging into the ASPINRemoteImageDownloader
and doing this type cast is a bit complicated, so a passthrough API
to get the PIN* objects directly might be worthwhile.
* [PINCache] Declare necessary APIs to avoid a direct dependency.
* Clear ivar after scheduling for main thread deallocation
After scheduling the ivar for main thread deallocation we have clear out the ivar, otherwise we can run into a race condition where the main queue is drained earlier than this node is deallocated and the ivar is still deallocated on a background thread
* First clear and than schedule
* Rolling back CI to known version for now
* Fix availability in tests
* Commenting out for now to see if it builds
* Fix up the Swift framework test
* Fix availability
* Fix crashes caused by failing to unlock or destroy a static mutex while the app is being terminated
* Allocate static mutexes on the heap memory to avoid destruction at app exit
* ASThread to use ASDisplayNodeCAssert() instead of assert()
* Added attributed versions of accessibilityLabel, accessibilityHint and accessibilityValue
* Follow conventions for property types
* Use curly braces
* Update changelog
* Follow conventions for property types in UIView+ASConvenience.h
* Add compatibility for Xcode 8
* Use isEqualToString instead of pointer comparison
* Only allocate attributed strings once. Use _setAttributedAccessibilityToViewAndProperty only for attributed properties.
* [ASCornerRounding] Initial (untested) implementation of ASCornerRounding features.
* [ASCornerRounding] Working version of both clip corners and precomposited corners.
* [ASCornerRounding] Improve factoring and documentation of corner rounding features.
* [ASCornerRounding] Some final fixups.
* Add entry to changelog for .cornerRoundingType
* [Yoga] Add insertYogaNode:atIndex: method. Improve handling of relayouts.
* Add new "version" parameter to Yoga initialization of ASDisplayNodeLayout C++ struct.
* Mark ASRunLoopQueue as drained if it contains only NULLs
* Update CHANGELOG.md
* Cover ASRunLoopQueue with tests
* Include PR link in CHANGELOG.md
* Replace license header of ASRunLoopQueueTests.m with correct one
* Insert a nil in _internalQueue to ensure compaction, instead of maintaining a state for _isQueueDrained
* Add support for downloading a set of URLs on ASNetworkImageNode
* Should be building now;
* Remove old unused code
* Add a changelog message
* Bump PINRemoteImage
* Huy's comments
* Notify rasterized subsides that render pass has completed
* Traverse entire subnode tree notifying all subnodes
* Add entry in changelog
* Retrieve rasterizesSubtree flag while holding instance lock
* Balance display delegate calls for rasterized subnodes
* [ASCollectionNode] Add -isProcessingUpdates and -onDidFinishProcessingUpdates: APIs.
Over time, there have actually been a lot of legitimate uses for an API like this.
In fact, I'm not quite sure what has held us back from adding one!
I believe that at least some portion of -wait calls (even if less than 50%) could be
replaced with -onDidFinishProcessingUpdates:, which could potentially improve the
performance of applications using -wait by a significant amount.
Please take a close look at implementation correctness. Although I'm in a bit of a
rush, I'm aiming to make this properly documented and added a basic test -- but it
could certainly use some more detailed testing as a followup.
* [ASCollectionNode] Improvements to the implementation of -isProcessingUpdates and -onDidFinishProcessingUpdates:
* Add lock to ASMainSerialQueue count method.
* [ASTableNode] Implement -isProcessingUpdates and -onDidFinishProcessingUpdates:. Rename -waitUntil to consistent naming.
* Table and collection views to consider their content inset when calculating element size range
* Update CHANGELOG
* Address comments
* -[ASPagerNode currentPageIndex] to use pageSize instead of bounds
* Update documentation in ASPagerNode
* Minor change
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.
- During the first layout calculation, measure more than just elements in the visible viewport.
- Remove unnecessary params in `-[ASCollectionLayoutState getAndRemoveUnmeasuredLayoutAttributesPageTableInRect`.]