当UIViewController被解雇时闪烁

时间:2015-10-26 08:52:44

标签: ios objective-c iphone uiviewcontroller

我有一个UIViewController,我用它来显示视频广告。一旦用户点击关闭广告按钮,我就会关闭视图控制器,但是在它被解除并且显示父视图后很快就会出现闪烁。

这是我在代码中所做的事情

@interface myController:UIViewController
@end

static myController* vc = [[myController alloc] init];

@implementation myViewController

-(void) showController
{
    [currentViewController presentViewController : self animated : NO   completion : nil];
}

-(void) hideController
{
   [self dismissViewControllerAnimated : NO completion : nil];
}

-(void) startPlaying
{
    dispatch_async(dispatch_get_main_queue(), ^{

    [vc showController];
     //call the method which will play the video.
});

}

-(void) viewClosed
{
    dispatch_async(dispatch_get_main_queue(), ^{

    [vc hideController];

});
}
@end

快速发生屏幕截图是不可能的。

我已经尝试使呈现的视图透明,因为我认为在解雇之后发生的闪烁是由于在关闭视频广告然后尝试解雇呈现的视图控制器之后发生的延迟。它可以解雇,但是在解雇之后,看起来父视图试图进入纵向模式而不是横向模式。这是它的截图..

Before

After

3 个答案:

答案 0 :(得分:1)

你的根本问题是动画需要时间

对于iOS来说实际上并不那么容易。比如你要求动画摆脱视图控制器。细

您必须使用完成功能块 - 您必须等待动画解散,(在完成框中)继续进行其他活动。

简而言之,在解除视图控制器时,必须在所有情况下使用完成块。

答案 1 :(得分:0)

尝试使用YES作为动画,并注意你是否在viewWillAppear中执行某些操作,因为只要你关闭presentViewController,就会调用父ViewController viewWillAppear。

答案 2 :(得分:0)

我似乎通过使用CATransition解决了我的问题。但是,我不喜欢动画。我尝试使用UIViewControllerTransitioningDelegate和UIViewControllerAnimatedTransitioning创建我的自定义动画,但它没有工作,因为在解除了视图后控制器它显示黑屏,我不知道为什么.. 对我有用的代码如下所示......

CATransition* transition = [CATransition animation];
transition.duration = 0.05;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromTop;
UIView* containerView = self.view.window;
[containerView.layer addAnimation:transition forKey:nil]; 

[self dismissViewControllerAnimated : YES completion : nil]

谢谢!