如何在不使用两个视图控制器的情况下为两个视图之间的转换设

时间:2014-10-20 17:14:23

标签: ios animation uiview

我正在尝试模拟一副卡片,在屏幕上滑动使下一张卡片从右侧进入显示器,覆盖当前可见的卡片。我知道如何使用两个视图控制器和自定义segue对其进行编程,但我想保持简单。因此,我希望保持在同一个视图控制器中,将当前视图复制到临时视图中,绘制新视图,然后设置新视图的动画以从右侧漂移并覆盖旧视图。这是我的尝试:

- (IBAction)SwipeLeft:(id)sender
{   UIView *sv = self.view;
    [self Layout]; // this is where the next card is drawn
    UIView *dv = self.view;

    dv.center = CGPointMake(sv.center.x + sv.frame.size.width, sv.center.y);
    sv.center = CGPointMake(sv.center.x, sv.center.y);

    [UIView animateWithDuration:0.3
                     animations:^
     {   dv.center = CGPointMake(sv.center.x, sv.center.y);
         sv.center = CGPointMake(sv.center.x - sv.frame.size.width, sv.center.y);
     }];

    NSLog(@"Swipe left");
}

当我运行此代码时,我确实看到新卡正确进入屏幕,但是,“旧”视图立即消失并在动画开始前变为黑屏。

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

显然,这段代码不起作用,因为两个指针都指向同一个内存位置。我决定以不同的方式解决我的问题。我没有尝试复制View对象,而是创建了一个屏幕截图,将UIImage复制到View对象中,在绘制新屏幕时覆盖旧屏幕副本下的屏幕,然后为该View对象设置动画。可能是一个更智能的解决方案。它很棒。

相关问题