我正在尝试将UIImageView转换为UIScrollView,但找不到任何方法来实现我想要的结果。
我将尝试解释...我有一个包含许多UIImageViews的UIScrollView。当我长按其中一个UIImageViews时,我希望它移动到另一个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,所以我不能在屏幕的中心显示它。
所以我现在尝试将容器视图移出scrollView,然后像以前一样继续:
UIView *gameView = cardView.superview.superview;
[cardView removeFromSuperview];
[gameView addSubview:cardView];
cardView.frame = [self getOriginalFrameForCard:card];
这是我真正的问题开始的地方:如果我只运行此代码然后不应用居中过渡,它可以正常工作:UIImageView不会在屏幕上移动,但它不再在UIScrollView中。但是,如果我在此之后从上面开始转换,那么卡片的初始侧面就会消失,然后卡片的背面才会从零开始翻转。
在进一步的测试中,我可以通过将代码返回到动画完成块中的UIScrollView中来完成此操作的反向操作。看来,在执行转换之前,将卡片的正面渲染到主窗口的代码不会被触发。
对于这篇文章感到抱歉,只是试图尽可能充分地解释这种情况
答案 0 :(得分:0)
我已经设法通过将转换代码包装在NSTimer中的延迟为0.0来获得所需的效果,如下所示:
[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(animateToMiddle) userInfo:nil repeats:NO];
这感觉有点脏,如果有人能给我一个更好的解决方案,我会高兴地接受。另外,如果我完全滥用过渡系统,请告诉我。我没有特别长时间地使用Objective-C,并且有很多我无法理解的事情。