使用animateWithDuration,动画非常难以预测

时间:2013-02-15 21:10:45

标签: ios xcode cocoa-touch uiview uikit

这个问题被很多人问到,但我还没有找到答案。

我有一些类,其中包含许多其他带动画的方法

someClass.m
@implementation

////..

-(void) someAnimationWithSomeObject (someParameters...blablabla

    [UIView animateWithDuration:0.2f
                          delay:delay
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^
     {
         self.center = point;
         self.transform = CGAffineTransformMakeRotation(_angle);
     }
                     completion:nil)];
ViewController中的

-(void) someMethod1 {
/.....


for (int i=0; i < count; i++) {

/...some operation with coordinates

        [self.cardContainer addSubview:someView];

        [someView someAnimationWithSomeObject:someParameters withDelay:delay];
        delay += 0.2f; 
/... }

[self someMethod2];

}

-(void) someMethod2 {
/.....


for (int i=0; i < count; i++) {

/...some operation with coordinates

        [self.cardContainer addSubview:someView];

        [someView someAnimationWithSomeObject:someParameters withDelay:delay];
        delay += 0.2f; 
/... }

}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self someMethod1];

}

当我使用这段代码动画时非常难以预料,因为当调用someMethod2时,坐标的计算速度最快,那么就是动画。

如何使动画在第一种方法中播放,然后在第二种方法中播放

[解决]

在someMethod1之后添加

 [self performSelector:@selector(someMethod2) withObject:nil afterDelay:delay];

需要一些延迟+或 -

的修正

做得好!

1 个答案:

答案 0 :(得分:0)

考虑在第一个方法的完成块中启动第二个方法。也就是说,&#34;做这个动画;然后,当它完成后,调用someMethod2并开始下一个动画。