我正在尝试将 UIImageView 从 UIScrollView 转换出来,但找不到任何方法来实现我想要的结果。
我将尝试解释...我有一个 UIScrollView,其中包含许多 UIImageViews。当我长按其中一个 UIImageView 时,我希望它翻转到另一个 UIImageView,同时移动到屏幕的中心(超出 UIScrollView 的范围)。基本上,我在屏幕底部显示了一系列卡片,当用户按下其中一个时,我希望它翻转并在屏幕中央显示背面。
我目前在每张卡片上都有一个容器 UIView,包含正面和背面。这样我可以在将卡片移动到屏幕中心的同时翻转卡片(顺便增加帧大小)。我为此使用的代码是:
[UIView transitionWithView:cardView
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationCurveEaseOut
animations:^
{
[mainView removeFromSuperview];
[cardView addSubview:reverseView];
[cardView.superview bringSubviewToFront:cardView];
cardView.frame = CGRectMake(176.0, 70.0, 128.0, 180.0);
}
completion:NULL];
这在没有 UIScrollView 的情况下非常有效,但是一旦我引入 UIScrollView,一切都会崩溃,因为我需要 clipsToBounds 为 YES,所以我无法在屏幕中央显示它。
所以我现在尝试将容器视图移出滚动视图,然后像以前一样继续:
UIView *gameView = cardView.superview.superview;
[cardView removeFromSuperview];
[gameView addSubview:cardView];
cardView.frame = [self getOriginalFrameForCard:card];
这是我真正的问题开始的地方:如果我只是运行此代码然后不应用居中转换,它工作正常:UIImageView 不会在屏幕上移动,但它不再在 UIScrollView 内。但是,如果在此之后我确实从上方运行过渡,则卡片的初始面会在卡片背面从无到有翻转之前消失。
在进一步的测试中,我可以通过将返回卡片的代码放入动画完成块中的 UIScrollView 中来很好地执行此操作的相反操作。在执行转换之前,将卡片正面渲染到主窗口的代码似乎没有触发。
很抱歉这篇文章,只是试图尽可能充分地解释这种情况