UIView animateWithDuration不在ios8中制作动画

时间:2014-10-09 11:20:41

标签: ios objective-c iphone animation quartz-core

我已经实现了一个自定义segue类来模拟没有导航栏的推送过渡。诀窍是拍摄快照,将它们添加到视图中,替换viewController,移动快照,最后删除它们。这会影响viewController的水平移动,但实际上只移动了两个UIImagesView。

以下代码实现了这一点。

self.destinationImageView.frame = offsetFrameD;
self.sourceImageView.frame = offsetFrameS;

//ViewController replacement
[self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];

//Overpose the snapShot who will simulate the transition between vies.
[destinationView addSubview: self.sourceImageView];
[destinationView addSubview: self.destinationImageView];

[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     self.destinationImageView.frame = self.finalFrameD;
                     self.sourceImageView.frame = self.finalFrameS;
                 }
                 completion:^(BOOL finished) {
                     [self.sourceImageView removeFromSuperview];
                     [self.destinationImageView removeFromSuperview];
                 }];

此代码适用于iOS 7.但是,使用iOS 8时,似乎未执行动画。 destinationImageView和sourceImageView直接移动到finalPosition(WITHOUT ANIMATING)并且不调用完成块,因此最终都不会删除UIImageView。

有谁知道应该如何使用iOS 8执行动画?

2 个答案:

答案 0 :(得分:4)

您应该调整自动布局约束而不是帧位置。看看这个解决方案。我希望它有所帮助。 UIView transitionWithView & setting the frame no longer works iOS8

答案 1 :(得分:0)

在动画开始之前使用以下代码行:

[UIView setAnimationsEnabled:YES];