Objective C - 带动画的自定义UIView类Init

时间:2017-06-23 17:08:21

标签: ios objective-c uiview

我有一个简单的自定义UIView类,它带有一个关联的xib文件,其中包含一个我想在初始化时开始旋转的ImageView。

以下是我的UIView代码。使用断点我可以确认代码被调用:

#import "PinWithTimeView.h"
#import "QuartzCore/QuartzCore.h"


@implementation PinWithTimeView

- (id)initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];

    if (self) {

        CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
        fullRotation.fromValue = [NSNumber numberWithFloat:0];
        fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
        fullRotation.duration = 6;
        fullRotation.repeatCount = 10;
        [self.rotateCircle.layer addAnimation:fullRotation forKey:@"360"];

    }

    return self;
}


@end

然而,当我这样初始化时,ImageView永远不会旋转。有人可以告诉我为什么吗?

PinWithTimeView *pinMarker = [[[NSBundle mainBundle] loadNibNamed:@"PinWithTimeView" owner:self options:nil] firstObject];

2 个答案:

答案 0 :(得分:1)

我不认为你可以为视图/图层设置动画,除非它是视图层次结构的一部分。在init / initWithCoder中它还没有被添加。

您可以尝试实现UIView方法didMoveToSuperview方法。

答案 1 :(得分:0)

我通过将动画块移动到layoutSubviews方法来实现这一点。感谢Duncan指出我正确的方向,该视图不是initWithCoder

中的层次结构的一部分