UIView动画立即完成

时间:2013-10-09 11:18:11

标签: ios objective-c animation uiview

我一直在努力解决这个问题,我不知道这里有什么问题。我确实有一个想法 - 我认为我添加并试图制作动画的某种方式尚未包含在视图层次结构中,这就是为什么核心动画不会浪费周期来制作动画。我在项目中成功完成了一些其他动画,但我在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动画添加到包含视图但没有再次成功..

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

你不应该在init方法中放置动画。在实际显示视图后立即尝试调用它们(在超级视图中添加)并查看当时会发生什么。