我找不到这个问题的答案。
我想知道如何使 calayer 中的图像大小小于 calayer 的边界大小。
我在 iPad 游戏中有几个 pawn,每个都是一个 CALayer,我让它们通过 contentsGravity=kCAGravityResizeAspect 调整大小。图像在 30x30 的 CALayer 中为 128x128,因此图像会自动调整大小为 30x30,并且由于两者都是一个盒子,纵横比保持不变并起作用。
在这里,我将 CALayer 的边界设置为与父 View 的大小成比例,因此 Pawns 始终呈现与 View 相同的相对大小。这个在我的 calayer Sprite 类子类中:
-(void) setSpriteScaleToDice {
CGFloat newSize = [self superlayer].bounds.size.width * 0.066666667f;
self.bounds=CGRectMake(0.0f, 0.0f, newSize, newSize);
self.contentsGravity = kCAGravityResizeAspect;
}
请注意,在我的例子中,CALayer 边界的最大值为 30x30,这对于触摸来说很小。这就是我面临的问题,由于体积小,很难“触摸”它们,有时触摸会失败......
我正在考虑的一个想法是增加 calayer 的“边界”,同时保持图像的原始大小。问题是我进行了很多搜索并尝试了 contentsGravity、contentsCenter、contentsScale 等多种选项...但都没有成功。
特别是,根据 apple docs 看起来,方法是使用 contentsCenter(而不是使用 contentsGravity),但是我在位图中得到变形...
拜托,任何想法都非常受欢迎,在此先感谢
路易斯
最佳答案
这可能是个愚蠢的问题,但为什么要为此使用 CALayers
而不是 UIViews
? UIImageView
有一个 contentMode
属性,可以让您轻松地做到这一点(更不用说更容易用于触摸事件处理)。
就是说,CALayer
有一个 contentsRect
属性,似乎可以让您为要在其中绘制的内容定义一个子矩形,这样您就可以做自己想做的事情想要。
另一种选择是将您的图像层放在一个更大的层中,并将其用于 HitTest 。
关于objective-c - 如何独立于 CALayer 的边界缩放 CALayer 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9244514/