Iphone 动画宽度持续时间内旋转的当前值
我正在使用animateWithDuration使我的一个UIVIew无休止地旋转。现在,我需要获取UIView在特定时间的旋转的当前值。 我已尝试使用以下函数:Iphone 动画宽度持续时间内旋转的当前值,iphone,uiviewanimation,Iphone,Uiviewanimation,我正在使用animateWithDuration使我的一个UIVIew无休止地旋转。现在,我需要获取UIView在特定时间的旋转的当前值。 我已尝试使用以下函数: -(float)getCurrentRotation{ CGAffineTransform transform = ((UIImageView*)[self.subviews objectAtIndex:0]).transform; return (atan2(transform.b, transform.a)); } 但它总是返回
-(float)getCurrentRotation{
CGAffineTransform transform = ((UIImageView*)[self.subviews objectAtIndex:0]).transform;
return (atan2(transform.b, transform.a));
}
但它总是返回与我在最初调用animateWithDuration时指定的值相同的值(M_PI/2):
[UIView animateWithDuration:4 delay:0 options:( UIViewAnimationOptionRepeat|UIViewAnimationOptionCurveLinear) animations:^{
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
((UIImageView*)[self.subviews objectAtIndex:0]).transform = transform;
}
completion:^(BOOL finished){
}];
有没有办法获得旋转的当前值
谢谢。我不确定是否可以在屏幕上显示“旋转值”。但我认为不是,因为视图对象确实立即具有新的属性值,并且动画发生在框架深处无法到达的对象上 为了实现您的目标,我将把轮换分为单个步骤,其粒度足以满足您的需要。然后只需计算步骤,并使当前步骤可用。可能看起来有点像这样(未经测试,只是涂鸦):
使用基于CoreAnimation的动画时,视图属性(边界、变换…)实际上从未更改。设置动画时屏幕上显示的层的属性有哪些变化(请参见),可以使用
view.layer.presentationLayer
访问该层
因此,以下行将在您请求时获得实际转换:
CGAffineTransform transform = CATransform3DGetAffineTransform([(CALayer*)[[[self.subviews objectAtIndex:0] layer] presentationLayer] transform]);
您必须链接并包括QuartzCore
框架,该框架定义了CALayer
,才能起作用
#import <QuartzCore/QuartzCore.h>
#导入
#import <QuartzCore/QuartzCore.h>