Skip to content

Commit

Permalink
[ASCoreAnimationExtras] Update documentation for resizbale images #tr…
Browse files Browse the repository at this point in the history
…ivial (TextureGroup#492)

* Update documentation for resizbale images

* Add documentation to ASDisplayNodeSetResizableContents
  • Loading branch information
Kaspik authored and bernieperez committed Apr 25, 2018
1 parent c86ac98 commit 2d4a93e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
7 changes: 6 additions & 1 deletion Source/Private/_ASCoreAnimationExtras.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/**
Expand Down
10 changes: 3 additions & 7 deletions Source/Private/_ASCoreAnimationExtras.mm
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit 2d4a93e

Please sign in to comment.