0

这是我目前拥有的:http ://cl.ly/PIFB

以及它背后的代码:

UIView *smallView = [[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:recognizer.view.tag inSection:0]] contentView];
CGRect initialSize = smallView.frame;
CGRect finalSize = CGRectMake(150.0, 100.0, 660.0, 450.0);
UIView *largeView = [[UIView alloc] initWithFrame:initialSize];
[largeView setBackgroundColor:[UIColor blackColor]];
[largeView setClipsToBounds:NO];
[UIView transitionFromView:smallView toView:largeView duration:2 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {
     [[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:recognizer.view.tag inSection:0]] contentView].frame = finalSize;
     [largeView setFrame:finalSize];
     [smallView removeFromSuperview];
     [self addSubview:largeView];
     [UIView animateWithDuration:2 animations:^{
         smallView.frame = finalSize;
         [largeView setFrame:finalSize];
     }];
 }];

基本上我有一个 UITableView 视图。当其中一个视图被点击时,我想同时缩放和翻转它,以便它在屏幕中央显示一个新的更大视图。目前它会翻转较小的视图并最终以正确的尺寸显示较大的视图,但它不会平滑过渡。

在上面的代码中 smallView 是当前点击的单元格内容视图。largeView 是最终将被开发以显示更多与被点击的单元格相关的数据的新视图。现在它由黑色视图表示。我真的希望小细胞同时生长和翻转,以便它平滑地过渡到更大的视图。

您的帮助将不胜感激。我在客观 c、可可触摸和执行动画方面的经验非常有限。

非常感谢。

4

3 回答 3

1

我终于弄明白了。见这里:http ://cl.ly/PQqP

它要求我执行两个单独的 UIView transitionWithView 方法:

        [_transitionView addSubview:smallView];
        [smallView setFrame:CGRectMake(0, 0, _transitionView.frame.size.width, _transitionView.frame.size.height)];
        [UIView transitionWithView:_transitionView duration:.5 options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionCurveEaseOut animations:^(){
            [UIView transitionWithView:cellView duration:.25 options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionCurveEaseIn animations:^(){
                [cellView setFrame:smallViewOrigin];
            } completion:NULL];
            _transitionView.frame = finalSize;
            smallView.frame = smallViewOrigin;
            [_transitionView insertSubview:metricModalViewController.view belowSubview:smallView];
            [smallView removeFromSuperview];
            metricModalViewController.view.frame = metricModalEndSize;
        } completion:^(BOOL finished) {
            [_transitionView setFinalView:metricModalViewController.view];;
        }];
于 2013-06-04T15:47:04.153 回答
0

看起来你应该transitionWithView:duration:options:animations:completion:改用。像这样:

[UIView transitionWithView:self
        duration:2
        options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionAllowAnimatedContent
        animations:^(){
            smallView.frame = finalSize;
            [smallView removeFromSuperview];
            [self addSubview:largeView];
            largeView.frame = finalSize;
        }
        completion:NULL];

这可能会翻转self视图,这可能看起来并不完全正确。如果这是一个问题,那么在你的层次结构中添加一个额外的视图,它只包含与它们相同大小的 smallView 或 largeView。除了 smallView 和 largeView 的框架之外,还设置该视图的框架。(或者只是设置容器视图变换,或者只是设置容器视图框架并为 smallView 和 largeView 配置适当的自动调整大小选项。)

于 2013-05-29T19:11:27.170 回答
0

也许试试这个。设置一个视图containerView,它是 smallView 的子视图,self最初包含 smallView。制作containerView您最初为 smallView 所拥有的框架。使 smallView 的大小与 containerView 的大小相同但原点 (0,0) 以便 smallView 完全填充 containerView。

[UIView transitionWithView:containerView
        duration:2
        options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionAllowAnimatedContent
        animations:^(){
            containerView.frame = finalSize;
            smallView.frame.size = finalSize.size;
            [smallView removeFromSuperview];
            [containerView addSubview:largeView];
            largeView.frame.size = finalSize.size;
        }
        completion:NULL];

我只是猜测,再一次。

于 2013-05-30T20:39:36.253 回答