我正在尝试模拟一副卡片,在屏幕上滑动使下一张卡片从右侧进入显示器,覆盖当前可见的卡片。我知道如何使用两个视图控制器和自定义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");
}
当我运行此代码时,我确实看到新卡正确进入屏幕,但是,“旧”视图立即消失并在动画开始前变为黑屏。
我该如何纠正?
答案 0 :(得分:0)
显然,这段代码不起作用,因为两个指针都指向同一个内存位置。我决定以不同的方式解决我的问题。我没有尝试复制View对象,而是创建了一个屏幕截图,将UIImage复制到View对象中,在绘制新屏幕时覆盖旧屏幕副本下的屏幕,然后为该View对象设置动画。可能是一个更智能的解决方案。它很棒。