[ASCoreAnimationExtras] Update documentation for resizbale images #trivial (#492)

* Update documentation for resizbale images

* Add documentation to ASDisplayNodeSetResizableContents
This commit is contained in:
Jakub Kašpar 2017-08-12 08:03:42 -07:00 committed by Michael Schneider
parent f58b0b3cd3
commit 6b3e2ba4e0
2 changed files with 9 additions and 8 deletions

View File

@ -38,7 +38,12 @@ ASDISPLAYNODE_EXTERN_C_BEGIN
@interface ASDisplayNode (ASResizableContents) <ASResizableContents>
@end
// This function can operate on either an ASDisplayNode (including un-loaded) or CALayer directly.
/**
This function can operate on either an ASDisplayNode (including un-loaded) or CALayer directly. More info about resizing mode: https://github.com/TextureGroup/Texture/issues/439
@param obj ASDisplayNode, CALayer or object that conforms to `ASResizableContents` protocol
@param image Image you would like to resize
*/
extern void ASDisplayNodeSetResizableContents(id<ASResizableContents> obj, UIImage *image);
/**

View File

@ -26,20 +26,16 @@ extern void ASDisplayNodeSetupLayerContentsWithResizableImage(CALayer *layer, UI
extern void ASDisplayNodeSetResizableContents(id<ASResizableContents> obj, UIImage *image)
{
// FIXME: This method does not currently handle UIImageResizingModeTile, which is the default on iOS 6.
// I'm not sure of a way to use CALayer directly to perform such tiling on the GPU, though the stretch is handled by the GPU,
// and CALayer.h documents the fact that contentsCenter is used to stretch the pixels.
if (image) {
ASDisplayNodeCAssert(image.resizingMode == UIImageResizingModeStretch || UIEdgeInsetsEqualToEdgeInsets(image.capInsets, UIEdgeInsetsZero),
@"Image insets must be all-zero or resizingMode has to be UIImageResizingModeStretch. XCode assets default value is UIImageResizingModeTile which is not supported by Texture because of GPU-accelerated CALayer features.");
// Image may not actually be stretchable in one or both dimensions; this is handled
obj.contents = (id)[image CGImage];
obj.contentsScale = [image scale];
obj.rasterizationScale = [image scale];
CGSize imageSize = [image size];
ASDisplayNodeCAssert(image.resizingMode == UIImageResizingModeStretch || UIEdgeInsetsEqualToEdgeInsets(image.capInsets, UIEdgeInsetsZero),
@"the resizing mode of image should be stretch; if not, then its insets must be all-zero");
UIEdgeInsets insets = [image capInsets];
// These are lifted from what UIImageView does by experimentation. Without these exact values, the stretching is slightly off.