【问题标题】:CALayer in a UIImageViewUIImageView 中的 CALayer
【发布时间】:2011-12-19 10:59:13
【问题描述】:

我有一个 CALayer,我想将它用作 UIImageView。这样我就可以用计时器等移动它......所以这里是图层:

CALayer *rootLayer  = [CALayer layer];

我想用这样的计时器来移动它:

Image.center=CGPointMake(Image.center.x +10, Image.center.y );

【问题讨论】:

    标签: iphone uiimageview calayer layer


    【解决方案1】:

    为此,您需要CABasicAnimation。对于计时器,创建一个NSTimer。确保计时器使用performSelectorOnMainThread 方法之一在主线程上触发该方法。

    该方法会将CABasicAnimation 添加到图层。您必须注意结束位置,因为当动画结束时,您的图层仍会在其原始位置可见。

    要解决此问题,您需要在 CABasicAnimationanimationDidStart 委托回调中更新层的模型值。

    请注意,如果它是一个重复的动画——我猜你正在使用计时器——你可以使用removedOnCompletion 标志。这意味着您可以重复使用相同的动画。查看这个问题,了解如何使用它的详细信息:

    How to reuse an CABasicAnimation when not removed after completion?

    【讨论】:

    • 所以不可能将图层分配给 uiimageview ?
    • 图像视图已经有一个图层。所有视图都由 CALayer 支持。您可以通过调用 myview.layer 访问该属性。当你有这个时,只需使用 addAnimation 将动画添加到该层
    • 最后一个小问题,我接受你的回答:使用 uiimageView 的层而不是 image.png 会更好地提高性能吗?
    • 如果您使用 UIView 或 UiView 子类,您将始终使用图层。主要的性能考虑是只加载一次图像。如果您使用 UIImage 方法 imageNamed ,它将为您处理。这有意义吗?
    • 我做不到:image.layer=rootLayer。有一个错误:在不是结构或联合的东西中请求成员“层”
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2012-11-01
    • 2011-03-26
    • 2012-01-09
    相关资源
    最近更新 更多