CALayer in a UIImageView
我有一个 CALayer,我想将它用作 UIImageView。这样我就可以用计时器等移动它......所以这里是图层:
1
| CALayer *rootLayer = [CALayer layer]; |
我想用这样的计时器来移动它:
1
| Image.center=CGPointMake(Image.center.x +10, Image.center.y ); |
为此,您需要一个 CABasicAnimation。对于计时器,创建一个 NSTimer。确保计时器使用 performSelectorOnMainThread 方法之一在主线程上触发该方法。
该方法会将 CABasicAnimation 添加到图层中。您必须注意结束位置,因为当动画结束时,您的图层仍将在其原始位置可见。
要解决这个问题,您需要在 CABasicAnimation.
的 animationDidStart 委托回调中更新层的模型值
请注意,如果它是一个重复的动画——我猜你正在使用计时器——你可以使用 removedOnCompletion 标志。这意味着您可以重复使用相同的动画。查看此问题以获取有关如何使用它的详细信息:
CABasicAnimation 完成后未移除时如何重用?
- 所以不可能将图层分配给 uiimageview ?
-
图像视图已经有一个图层。所有视图都由 CALayer 支持。您可以通过调用 myview.layer 访问该属性。当你有这个时,只需使用 addAnimation 将动画添加到该层
-
最后一个小问题,我接受你的回答:使用 uiimageView 的层而不是 image.png 对性能更好吗?
-
如果您使用 UIView 或 UiView 子类,您将始终使用图层。主要的性能考虑是只加载一次图像。如果您使用 UIImage 方法 imageNamed ,它将为您处理。那有意义吗?
-
我做不到:image.layer=rootLayer。有一个错误:请求成员 \\'layer\\' 在不是结构或联合的东西中
-
是的,你不能这样做。为什么要将 image.layer 更改为不同的图层?为什么不直接将动画添加到 image.layer?
-
不工作,因为你没有看到动画?尝试在委托回调 animationDidStop 和 animationDidStart 中设置一个断点。不要忘记设置 animation.delegate 来接收回调。 animationDidStop 中有一个标志会告诉你动画是否完成。