同步或在串行队列中使用动画更新 UI

update UI with animation synchronously or in serial queue

我有自定义构建菜单,可以推送或弹出视图。例如 menu1 推送一个视图。如果按下 menu2,则删除上一个视图并显示其他视图。 推动和弹出动画。如何用动画连续 update/push/pop 视图?它不应该忽略任何菜单选择

我用了dispatch_queue_tNSOperationQueue都没有用,就好像它忽略了uiview动画一样。 self.uiOperationQueue 有 1 个作为最大并发操作。

[self.uiOperationQueue addOperationWithBlock:^{
    dispatch_async(dispatch_get_main_queue(), ^{
            [self updateViewsForSelection:menuType];
    });
}];

使用调度队列:

self.uiUpdateQueue = dispatch_queue_create("ui-updateQueue", NULL);
dispatch_async(self.uiUpdateQueue, ^{
        [self updateViewsForSelection:menuType];
});

所以基本上 [self updateViewsForSelection:menuType] 是用不同的菜单和带有持续时间的 uiview 动画调用的。我做错了什么?

可以将 animation blocks 添加到数组中并使用 completion block

一个接一个地执行它们
-(void)executeAnimationsInArray:(NSArray *)array atIndex:(int)index
{
    [UIView animateWithDuration:1 animations:array[index] completion:^(BOOL finished) {
        if (index < array.count - 1)
        {
            [self executeAnimationsInArray:array atIndex:index+1];
        }
    }];

}

可以这样用

id block1 = ^(void) {
    imgView.frame = CGRectOffset(imgView.frame, 10, 10);
};
id block2 = ^(void) {
    imgView.frame = CGRectOffset(imgView.frame, -10, -10);
};

[self executeAnimationsInArray:@[block1, block2] atIndex:0];