我的视图包含在我的应用程序的主视图中(屏幕中间的一个正方形)。我写了下面的代码,如果你向左滑动它,将视图从屏幕右侧滑动:
- (IBAction)swipeLeft:(id)sender
{
CGRect initCardViewFrame = self.cardView.frame;
CGRect movedCardToRightViewFrame = CGRectMake(initCardViewFrame.origin.x + 1000, initCardViewFrame.origin.y, initCardViewFrame.size.width, initCardViewFrame.size.height);
[UIView animateWithDuration:0.7
animations:^{self.cardView.frame = movedCardToRightViewFrame;}
completion:nil];
}
这很好用,但是我想扩展代码,这样一旦正方形离开屏幕的右侧,它就会从左侧返回到中间。我不太确定如何在窗户左侧“重新画”它,然后将它向后滑动到中间。我试过只重做帧,但动画只显示动画块中的最后一帧移动。我假设我需要将视图从屏幕上移开,然后将其重绘在屏幕左侧的外侧,然后将其滑入中间。除非有更直观的方式来做到这一点。
更新
我在下面回答了这个问题,但我不禁想到,如果不将UIView动画嵌入彼此内部,有更好的方法可以做到这一点。这是解决这个问题的唯一方法吗?
答案 0 :(得分:4)
我最终在“completion”参数中添加了以下代码:
completion:^(BOOL finished)
{
self.cardView.frame = moveCardToLeftViewFrame;
[UIView animateWithDuration:0.4
animations:^{self.cardView.frame = initCardViewFrame;}
completion:nil];
}];
注意* moveCardToLeftViewFrame是一个CGRect,它将视图放在可见窗口的左侧。因此,当它向右滑动后,它被放置在屏幕左侧,然后滑回中间。
答案 1 :(得分:0)
您可以在以下情况下使用此代码:
代码狙击:
- (void)animateViewWithTransformation:(MyEnumAnimationTransformation)animationTransformation withDuration:(CGFloat)duration {
CGFloat goOutOffScreenToX, cameInToScreenFromX;
switch (animationTransformation) {
case goOutToLeftGetInFromRight:
goOutOffScreenToX = -1 * [UIScreen mainScreen].applicationFrame.size.width;
cameInToScreenFromX = [UIScreen mainScreen].applicationFrame.size.width;
break;
case goOutToRightGetInFromLeft:
goOutOffScreenToX = [UIScreen mainScreen].applicationFrame.size.width;
cameInToScreenFromX = -1 * [UIScreen mainScreen].applicationFrame.size.width;
break;
default:
break;
}
CGRect originViewFrame = self.frame;
[UIView animateWithDuration:duration
animations:^{[self setX:goOutOffScreenToX];}
completion:^(BOOL finished)
{
[self setX:cameInToScreenFromX];
[UIView animateWithDuration:duration
animations:^{[self setX:originViewFrame.origin.x];}
completion:nil];
}];
}