Ios 抖动动画旋转显示以及设置动画
我有一个方法来执行小抖动动画。这个动画有些效果,但每次我从横向位置调用它时,它都会旋转。当模拟器处于横向时调用动画时,整个视图将自身旋转为纵向,然后执行动画。旋转本身没有设置动画,它只是突然改变,没有延迟。视图中的所有内容、所有按钮、文本字段、图像视图等也会发生变化 动画代码:Ios 抖动动画旋转显示以及设置动画,ios,animation,cgaffinetransform,quartz-core,Ios,Animation,Cgaffinetransform,Quartz Core,我有一个方法来执行小抖动动画。这个动画有些效果,但每次我从横向位置调用它时,它都会旋转。当模拟器处于横向时调用动画时,整个视图将自身旋转为纵向,然后执行动画。旋转本身没有设置动画,它只是突然改变,没有延迟。视图中的所有内容、所有按钮、文本字段、图像视图等也会发生变化 动画代码: - (void)shakeView { CGFloat t = 8.0; CGAffineTransform translateRight = CGAffineTransformTranslate(
- (void)shakeView
{
CGFloat t = 8.0;
CGAffineTransform translateRight = CGAffineTransformTranslate(CGAffineTransformIdentity, 0.0, t);
CGAffineTransform translateLeft = CGAffineTransformTranslate(CGAffineTransformIdentity, 0.0, -t);
self.view.transform = translateLeft;
[UIView animateWithDuration:0.07 delay:0.0 options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat animations:^{[UIView setAnimationRepeatCount:3.0];
self.view.transform = translateRight;
}
completion:^(BOOL finished){
if (finished)
{
[UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{self.view.transform = CGAffineTransformIdentity;
}
completion:NULL];
}
}];
}
老实说,我不太喜欢动画,所以我不知道我在这里做错了什么,更不用说我应该尝试什么或者在哪里寻找答案了
我希望在保持方向的同时保持动画。问题是视图上已经有了非标识变换。为了使视图在横向中正确显示,系统会对其应用变换以旋转视图。仅当设备位于UIDeviceOrientationGrait中时,视图的转换才为CGAffineTransformity。此方向旋转仅适用于应用程序的根子级,即窗口的第一个子视图。使用以下命令初始化翻译动画时:
CGAffineTransform translateRight = CGAffineTransformTranslate(CGAffineTransformIdentity, 0.0, t);
您告诉旋转视图忽略其旋转,并在纵向模式下捕捉回其方向。您可以通过执行以下两项操作之一来解决此问题:
注意-从iOS 8开始,UI窗口的根视图不再在旋转时变换。相反,UIWindow本身的边界会发生变化。有关这方面的另一个问题,请参见此处:我看不出有任何问题..它完全可以正常工作。。。您的代码的其他部分可能有问题。@Xman,您是否在横向中运行了动画?我的整个UIView、所有按钮、文本字段和图像视图都会在模拟器处于横向时翻转为纵向。我在两种模式下运行了它。因此,我最终使用了此处给出的动画:。但上述代码尚未修复。
- (void)shakeView
{
CGFloat t = 8.0;
//store the initial transform and use it to create the animated transforms
CGAffineTransform initialTransform = self.view.transform;
CGAffineTransform translateRight = CGAffineTransformTranslate(initialTransform, 0.0, t);
CGAffineTransform translateLeft = CGAffineTransformTranslate(initialTransform, 0.0, -t);
self.view.transform = translateLeft;
[UIView animateWithDuration:0.07
delay:0.0
options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat
animations:^{
[UIView setAnimationRepeatCount:3.0];
self.view.transform = translateRight;
}
completion:^(BOOL finished){
if (finished)
{
[UIView animateWithDuration:0.05
delay:0.0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
//restore the initial transform
self.view.transform = initialTransform;
}
completion:NULL];
}
}];
}