Ios UIView动画立即完成

Ios UIView动画立即完成,ios,objective-c,animation,uiview,Ios,Objective C,Animation,Uiview,我已经为此挣扎了很长一段时间,我只是不知道这里出了什么问题。我确实有一个想法——我认为我正在添加并试图制作动画的视图还没有包含在视图层次中,这就是为什么核心动画没有浪费周期来制作动画的原因。我在项目中成功地制作了一些其他动画,但我正在ViewController的viewDidLoad方法中运行它们。这是我的密码: - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) {

我已经为此挣扎了很长一段时间,我只是不知道这里出了什么问题。我确实有一个想法——我认为我正在添加并试图制作动画的视图还没有包含在视图层次中,这就是为什么核心动画没有浪费周期来制作动画的原因。我在项目中成功地制作了一些其他动画,但我正在ViewController的viewDidLoad方法中运行它们。这是我的密码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.opaque = NO;
        self.backgroundColor = [UIColor colorWithWhite: 1.0 alpha: 0.7];
        [self addTrack];
    }
    return self;
}

- (void)addTrack
{
    //init the track here
    UIView *track = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
    track.backgroundColor = [UIColor whiteColor];
    [self addSubview: track];

    //transform the track for its initial scale
    float scaleFactorX = 0.01;
    track.layer.anchorPoint = CGPointMake(0, 0);
    track.layer.position = CGPointMake(0, 0);
    track.transform = CGAffineTransformMakeScale(scaleFactorX, 1.0);

    //animate the track here
    [UIView animateWithDuration:8 delay:0.3 options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         NSLog(@"animation is running.");
                         track.transform = CGAffineTransformIdentity;
                     }
                     completion:^(BOOL finished) {
                         NSLog(@"animation finished.");
                     }];
}

因此,结果是“轨迹”立即缩放到其原始大小。我还尝试在didMoveToSuperview方法中调用addTrack,以便确保将包含的视图添加到视图层次结构中,但结果相同。我在该类中尝试了其他动画,如将alpha动画添加到包含的视图中,但再次没有成功。

您不应该首先在init方法中放置动画。尝试在视图实际显示(添加到superview上)后立即调用它们,然后看看会发生什么。

您不应该首先在init方法中放置动画。尝试在视图实际显示(添加到superview上)后立即调用它们,然后看看会发生什么。

尝试在加载视图后调用动画,以便可以看到它

-(void)viewDidAppear:(BOOL)animated
{
     [self addTrack];
}

加载视图后尝试调用动画,以便可以看到它

-(void)viewDidAppear:(BOOL)animated
{
     [self addTrack];
}

如前所述,我试图在didMoveToSuperview方法内调用addTrack,也在willMoveToSuperview内调用addTrack,我认为这是您的意思,但实际上没有任何变化。从视图外部,从另一个类,而不是从其内部调用方法[add track],这就是我的意思。如前所述,我试图在didMoveToSuperview方法内调用addTrack,也在willMoveToSuperview内调用addTrack,我想这就是你的意思,但实际上没有什么变化。从视图外部,从另一个类,而不是从它内部调用方法[add track],这就是我的意思。这是一个*UIViewController*的方法,我想在我的视图中运行动画。是的,这个解决了它,谢谢。但这不是我真正想要的,我的意思是我想在包含类的内部开始动画。不管怎样,我现在就不做了,希望我能找到另一个解决方案。这是一个*UIViewController*的方法,我想在我的视图中运行动画。是的,这个解决了,谢谢。但这不是我真正想要的,我的意思是我想在包含类的内部开始动画。没关系,我现在就这样离开,希望我能找到另一个解决办法。