自定义视图控制器转换iOS 7期间闪烁

自定义视图控制器转换iOS 7期间闪烁,第1张

概述我正在尝试进行一个非常简单的过渡:一个视图将屏幕的一半移动到左侧,而第二个(“到”)视图移动半个屏幕. 我有动画工作,但当我反转动画时,我看到一个闪烁. “to”视图(即原始视图)在0,0的原点可见,尽管我设置了不同的帧. 我转储了视图层次结构.帧设置正确(-100 0; 320 480用于查看),但是它显示为0,0.视图的屏幕截图是否缓存在动画的某处? - (void)animateTransi 我正在尝试进行一个非常简单的过渡:一个视图将屏幕的一半移动到左侧,而第二个(“到”)视图移动半个屏幕.

我有动画工作,但当我反转动画时,我看到一个闪烁. “to”视图(即原始视图)在0,0的原点可见,尽管我设置了不同的帧.

我转储了视图层次结构.帧设置正确(-100 0; 320 480用于查看),但是它显示为0,0.视图的屏幕截图是否缓存在动画的某处?

- (voID)animateTransition:(ID<UIVIEwControllerContextTransitioning>)TransitionContext{UIVIEwController *fromVIEwController = [TransitionContext vIEwControllerForKey:UITransitionContextFromVIEwControllerKey];UIVIEwController *toVIEwController   = [TransitionContext vIEwControllerForKey:UITransitionContextToVIEwControllerKey];UIVIEw *container = [TransitionContext containerVIEw];CGRect offsetCoverRect    = CGRectMake(-100.0,0.0,320,480);CGRect detailsRect        = CGRectMake(-100.0 + 320.0,480);CGRect detailsOutsIDeRect = CGRectMake(320.0,480);CGRect normalRect = CGRectMake(0.0,480);if (self.revealDetails){    toVIEwController.vIEw.frame = detailsOutsIDeRect;    [container addSubvIEw:toVIEwController.vIEw];}else{    [container insertSubvIEw:toVIEwController.vIEw belowSubvIEw:fromVIEwController.vIEw];    // reversing… set the frame to the original offset (shows at 0,0 for a moment)    toVIEwController.vIEw.frame = offsetCoverRect;}[UIVIEw animateKeyframesWithDuration:2 delay:0 options:0 animations:^{    if (self.revealDetails)    {        fromVIEwController.vIEw.frame = offsetCoverRect;        toVIEwController.vIEw.frame = detailsRect;    }    else    {        fromVIEwController.vIEw.frame = detailsOutsIDeRect;        toVIEwController.vIEw.frame = normalRect;    }} completion:^(BOol finished) { [TransitionContext completeTransition:finished]; }];}

更新:

它似乎与UIModalPresentationCustom有关.我需要使用它,以便在转换完成时不删除from视图.但是,它似乎假设反向转换的from视图控制器从0,0开始.

更新2:

使用以下代码非常容易重现:

UIVIEw *snapshot = [containerVIEw snapshotVIEwAfterScreenUpdates:NO];[containerVIEw addSubvIEw:snapshot];

以上将显示以屏幕为中心的视图,无论我在动画之前设置的实际帧或中心.

解决方法 我知道这是一个老问题,但我遇到了同样的问题,经过几个小时的挣扎,终于想出了一个解决方案:

在本动画的完成块中,

>创建fromVIEwController视图的快照
>对快照执行帧更改/转换
>将快照添加到containerVIEw
>从容器视图中删除fromVIEwController视图
>在解雇动画的完成块中(或者在解除动画的任何地方?),从容器中删除快照

通过从容器视图中删除fromVIEwController的视图,它不会重置为它的初始位置,因为它不再位于容器视图中.

总结

以上是内存溢出为你收集整理的自定义视图控制器转换iOS 7期间闪烁全部内容,希望文章能够帮你解决自定义视图控制器转换iOS 7期间闪烁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1099814.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存