Objective C - 带有动画的自定义 UIView 类初始化

Posted

技术标签:

【中文标题】Objective C - 带有动画的自定义 UIView 类初始化【英文标题】:Objective C - Custom UIView Class Init With Animation 【发布时间】:2017-06-23 17:08:21 【问题描述】:

我有一个简单的自定义 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];

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我通过将动画块移动到layoutSubviews 方法中来实现这一点。感谢 Duncan 为我指明了正确的方向,该视图还不是 initWithCoder 中的层次结构的一部分@

【讨论】:

以上是关于Objective C - 带有动画的自定义 UIView 类初始化的主要内容,如果未能解决你的问题,请参考以下文章

带有向下滑动动画的自定义推送视图控制器

如何在颤动中显示带有动画的自定义对话框?

如何在 Swift 3 中加载/删除带有动画的自定义视图

带有动画更改的自定义进度对话框的大小

获取嵌套的自定义字段 JSON Objective C

如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?