Ios 翻转和旋转
我有两种观点。我想要一张卡片沿其轴翻转和旋转以显示另一个视图 因此,当我单击view1时,view1应该翻转,但翻转的意义是它围绕y轴旋转以显示View2 我在IOS中使用FLIP指令,但这并没有实现我所寻找的“旋转”:Ios 翻转和旋转,ios,objective-c,cocoa-touch,ios4,core-animation,Ios,Objective C,Cocoa Touch,Ios4,Core Animation,我有两种观点。我想要一张卡片沿其轴翻转和旋转以显示另一个视图 因此,当我单击view1时,view1应该翻转,但翻转的意义是它围绕y轴旋转以显示View2 我在IOS中使用FLIP指令,但这并没有实现我所寻找的“旋转”: [UIView transitionFromView:(self.displayingPrimary ? self.primaryView : self.secondaryView) toView:(self.displayingPrim
[UIView transitionFromView:(self.displayingPrimary ? self.primaryView : self.secondaryView)
toView:(self.displayingPrimary ? self.secondaryView : self.primaryView)
duration: 2.0
options: (self.displayingPrimary ? UIViewAnimationOptionTransitionFlipFromLeft :
UIViewAnimationOptionTransitionFlipFromRight) | UIViewAnimationOptionShowHideTransitionViews
completion:^(BOOL finished) {
if (finished) {
self.displayingPrimary = !self.displayingPrimary;
}
}];
如果您不喜欢内置的翻转转换,有几种方法可以在iOS上使用Quartz将一个视图翻转到另一个视图。以下两个代码段都要求您导入
#import
,并链接到QuartzCore框架。请注意,我编写的两个函数都假定两个视图都是作为具有相同框架的子视图添加的,并且其中一个是隐藏的(setHidden:
)
第一个函数将使用二维变换将一个视图翻转到另一个视图。这更有效,它真正做的就是沿x轴缩放。在高速行驶时,它看起来相当不错
+ (void)flipFromView1:(UIView*)v1 toView:(UIView*)v2 duration:(NSTimeInterval)duration completion:(void (^)(BOOL finished))completion
{
duration = duration/2;
[v2.layer setAffineTransform:CGAffineTransformMakeScale(0, 1)];
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
[v1.layer setAffineTransform:CGAffineTransformMakeScale(0, 1)];
} completion:^(BOOL finished){
[v1 setHidden:YES];
[v2 setHidden:NO];
}];
[UIView animateWithDuration:duration delay:duration options:UIViewAnimationOptionCurveEaseOut animations:^{
[v2.layer setAffineTransform:CGAffineTransformMakeScale(1, 1)];
} completion:completion];
}
第二个函数执行实际的三维变换。请注意,如果使用此三维变换旋转的视图位于三维空间中其他子视图的上方或下方,则您可以看到这些其他视图在该动画期间被粘住或隐藏
+ (void)flipFromView2:(UIView*)v1 toView:(UIView*)v2 duration:(NSTimeInterval)duration rToL:(BOOL)rToL completion:(void (^)(BOOL finished))completion
{
duration = duration/2;
v2.layer.transform = CATransform3DMakeRotation((rToL ? -1.57079633 : 1.57079633), 0, 1, 0);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
v1.layer.transform = CATransform3DMakeRotation((rToL ? 1.57079633 : -1.57079633), 0, 1, 0);
} completion:^(BOOL finished){
[v1 setHidden:YES];
[v2 setHidden:NO];
}];
[UIView animateWithDuration:duration delay:duration options:UIViewAnimationOptionCurveEaseOut animations:^{
v2.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0);
} completion:completion];
}
那么已经内置的UIModalTransitionStyleFlipHorizontal呢?您最终为此做了什么?我很好奇到底什么最适合你(不管它是否是这条线索的一部分)。