未定义的ipad视图动画延迟问题

未定义的ipad视图动画延迟问题,ipad,ios6,delay,catransition,catransaction,Ipad,Ios6,Delay,Catransition,Catransaction,我对以下代码有问题。当我执行它时,第一个[CATransaction commit]和CompletionBlock:会有一个未定义的延迟。不知道那里发生了什么。只有当应用程序在设备上运行时才会发生这种情况 这是时间日志 2013-04-22 15:59:50.893 MyApp[27038:907] ***** A 2013-04-22 **15:59:50.894** MyApp[27038:907] ***** B 2013-04-22 **15:59:53.161** MyAp

我对以下代码有问题。当我执行它时,第一个
[CATransaction commit]
CompletionBlock:
会有一个未定义的延迟。不知道那里发生了什么。只有当应用程序在设备上运行时才会发生这种情况

这是时间日志

2013-04-22 15:59:50.893 MyApp[27038:907] ***** A   
2013-04-22 **15:59:50.894** MyApp[27038:907] ***** B  
2013-04-22 **15:59:53.161** MyApp[27038:907] ***** C  
2013-04-22 15:59:53.162 MyApp[27038:907] ***** D  
2013-04-22 15:59:53.164 MyApp[27038:907] ***** E  
2013-04-22 15:59:53.967 MyApp[27038:907] ***** F
-


我弄错什么了吗??请帮助。

我意识到CATTransaction会创建我制作动画的视图快照。因此,这项任务需要一些时间,因此会出现一些延迟

因此,作为一个解决方案,现在我正在使用视图的快照图像设置UIImageView的动画。所以现在这个未定义的问题已经解决了

NSLog(@"***** A");

[CATransaction begin];

[CATransaction setCompletionBlock:^{

    [CATransaction begin];

    NSLog(@"***** D");

    for (UIView *view in [masterTableView subviews])
    {
        if (view.tag == 501)
        {
            [view removeFromSuperview];
            break;
        }
    }

    [self.view sendSubviewToBack:masterTableView];
    [self.view bringSubviewToFront:detailView];

    CATransition *animation = [CATransition animation];
    [animation setType:kCATransitionPush];
    [animation setDuration:.8];
    [animation setSubtype:transitionFromRight?kCATransitionFromRight:kCATransitionFromLeft];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [CATransaction setCompletionBlock:^{

        NSLog(@"***** F");

        for (UIView *view in [detailView subviews])
        {
            if (view.tag == 502)
            {
                [view removeFromSuperview];
                break;
            }
        }

        [self addDetailView];

        [self.view sendSubviewToBack:detailView];
        [self.view bringSubviewToFront:masterTableView];

        CATransition *animation = [CATransition animation];
        [animation setType:kCATransitionPush];
        [animation setDuration:.8];
        [animation setSubtype:transitionFromRight?kCATransitionFromRight:kCATransitionFromLeft];
        [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

        [[detailView layer] addAnimation:animation forKey:@"transition"];
    }];

    [[masterTableView layer] addAnimation:animation forKey:@"transition"];

    NSLog(@"***** E");
}];

[CATransaction begin];

[CATransaction setCompletionBlock:^{

    NSLog(@"***** C");

    for (UIView *view in [self.view subviews])
    {
        if (view.tag == 500)
        {
            [view removeFromSuperview];
            break;
        }
    }

    CATransition *animation = [CATransition animation];
    [animation setType:kCATransitionPush];
    [animation setDuration:0];
    [animation setSubtype:transitionFromRight?kCATransitionFromRight:kCATransitionFromLeft];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    [[dummyView layer] addAnimation:animation forKey:@"transition"];
}];

[CATransaction commit];

[CATransaction commit];

NSLog(@"***** B");