gpt4 book ai didi

ios - 在自定义 View Controller 转换 iOS 7 期间闪烁

转载 作者:可可西里 更新时间:2023-11-01 03:35:06 25 4
gpt4 key购买 nike

我正在尝试做一个非常简单的过渡:一个 View 向左移动半个屏幕,而第二个(“到”) View 在半个屏幕中移动。

我的动画正在运行,但是当我反转动画时,我看到闪烁。尽管我设置了不同的框架,但“to” View (即原始 View )在 0,0 的原点处可见。

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

- (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, 0.0, 320, 480);
CGRect detailsOutsideRect = CGRectMake(320.0, 0.0, 320, 480);

CGRect normalRect = CGRectMake(0.0, 0.0, 320, 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 View 。但是,它似乎假定反向转换的 from View Controller 从 0,0 开始。

更新 2:

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

UIView *snapshot = [containerView snapshotViewAfterScreenUpdates:NO];
[containerView addSubview:snapshot];

无论我在动画之前设置的实际帧或中心如何,上面的 View 都会以屏幕为中心显示。

最佳答案

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

在当前动画的完成 block 中,

  1. 创建 fromViewController View 的快照
  2. 对快照执行帧更改/转换
  3. 添加快照到containerView
  4. 从容器 View 中移除 fromViewController View
  5. 在解雇动画的完成 block 中(或者如果它是解雇的任何地方?),从容器中删除快照

通过从容器 View 中移除 fromViewController 的 View ,它不会被重置到它的初始位置,因为它不再在容器 View 内。

关于ios - 在自定义 View Controller 转换 iOS 7 期间闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20525371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com