0

我正在尝试将 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 中来很好地执行此操作的相反操作。在执行转换之前,将卡片正面渲染到主窗口的代码似乎没有触发。

很抱歉这篇文章,只是试图尽可能充分地解释这种情况

4

1 回答 1

0

我已经设法通过在 NSTimer 中以 0.0 的延迟包装转换代码来获得预期的效果,如下所示:

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(animateToMiddle) userInfo:nil repeats:NO];

这感觉有点脏,如果有人能给我更好的解决方案,我会很乐意接受。另外,如果我完全滥用了过渡系统,请告诉我。我使用 Objective-C 的时间不是特别长,而且有很多东西我没有正确理解。

于 2013-06-08T21:34:59.303 回答