iPhone iOS使用UIView animateWithDuration块执行操作的正确方法是什么?
我在想,响应用户事件的“长”操作的正确方法是什么。例如,我有一张幻灯片来取消在0.5秒内在屏幕外设置动画的块。iPhone iOS使用UIView animateWithDuration块执行操作的正确方法是什么?,iphone,objective-c,ios,animation,uiview,Iphone,Objective C,Ios,Animation,Uiview,我在想,响应用户事件的“长”操作的正确方法是什么。例如,我有一张幻灯片来取消在0.5秒内在屏幕外设置动画的块。[self-coreDataAction]本身可能需要约0.3秒 我希望确保在用户看到动画结束时动作完成(我不希望用户意外导航到其他控制器或关闭应用程序以为动作完成) 我应该把[self-coreDataAction]放在哪里在这种情况下?在块上方、块内还是在完成块中 //should I put it here? CGPoint slideToCancelCenter = slid
[self-coreDataAction]
本身可能需要约0.3秒
我希望确保在用户看到动画结束时动作完成(我不希望用户意外导航到其他控制器或关闭应用程序以为动作完成)
我应该把[self-coreDataAction]放在哪里代码>在这种情况下?
在块上方、块内还是在完成块中
//should I put it here?
CGPoint slideToCancelCenter = slideToCancel.view.center;
[UIView animateWithDuration:0.5 animations:^{
self.goToSleepButton.center = slideToCancelCenter;
[UIView setAnimationDuration:0.5];
CGPoint sliderCenter = slideToCancel.view.center;
sliderCenter.y += slideToCancel.view.bounds.size.height;
slideToCancel.view.center = sliderCenter;
//should I put it here?
// [self coreDataAction];
} completion:^(BOOL finished) {
//should I put it here?
} ];
假设[self coreDataAction]在主线程上执行,我认为您应该将其放在第一行,以确保在动画完成时方法已完成。更好的处理方法可能是在屏幕上设置视图动画,然后在完成处理程序中启动
coreDataAction
。coreDataAction
方法执行完成后,您可以调用一个方法来设置幻灯片动画,以取消屏幕外的查看。如果coreDataAction
方法中的任何调用都阻止了调用,则动画将在coreDataAction
完成执行后才会出现。如果是这种情况,@AlexStone可以使用performSelector:withObject:afterDelay:
异步启动,但这最多只能在动画排队后启动coreDataAction
方法的执行。据我所知,他不希望动画在coreDataAction之前完成。如果异步启动,则动画可能会完成,coreDataAction仍在工作。由于动画只有半秒钟,我的想法是他只是在coreDataAction之后启动。关于core data action还有其他问题,因为从后台线程执行这些操作可能会导致需要进行上下文合并(两个线程具有各自的具有不同数据的草稿行)。我还没有准备好做这种活动。我最后把对核心数据的调用放在动画之上。有两个动画-一个是响应用户滑动滑块,这是在启动核心数据操作时。一旦核心数据操作完成,滑块将在屏幕外设置动画不需要代码>,您已经设置了持续时间。如果您不使用基于块的动画(请参见UIView类参考了解区别),请使用该选项。我认为您不应该让用户关心此“操作”是否完成。在后台进行计算,让用户继续做比等待计算机更重要的事情。