gpt4 book ai didi

iphone - CGAffineTransformMakeRotation 总是逆时针旋转

转载 作者:可可西里 更新时间:2023-11-01 03:17:50 30 4
gpt4 key购买 nike

我试图为 UIImageView 设置动画,以便在用户触摸它并在其上顺时针移动手指时逆时针旋转。
基本上我希望 UIImageView 在触摸结束后回到原来的位置,它应该逆时针方向移动。

我遇到的问题是,每次角度(以度为单位)大于 180 时,图像都会顺时针旋转回到其原始位置。它显然采取了最短路径返回。对于 179 度或更小的角度,图像逆时针旋转(我需要的)。

我尝试了这两段代码,它们的行为方式相同。有什么建议吗?

注意:这里的 angle 变量是一个 double 变量,它被初始化为零,并且在我的代码中始终为 0

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
[self handleObject:touches withEvent:event isLast:YES];

/* this doesn't make rotation counter clockwise for rotations greater than 180 */
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve: UIViewAnimationCurveLinear];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:1];
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
circle1ImgVw.transform = CGAffineTransformRotate(transform, angle);
// ends animation
[UIView commitAnimations];


/* this doesn't make rotation counter clockwise for rotations greater than 180 */
[UIView animateWithDuration:1.0 animations:^{
circle1ImgVw.transform = CGAffineTransformMakeRotation(angle);
}];
}

我尝试查看 this post它有几个问题

  • 动画完成后,我无法再触摸和旋转图像
  • 它总是以顺时针方向进行动画处理,但我一直无法弄清楚如何让它从用户结束旋转图像的那一点起顺时针方向进行。

最佳答案

我有一个类似的问题,检查接受的答案,它可能对你有帮助:

Rotate a UIView clockwise for an angle greater than 180 degrees


作为对评论的回应,也许这会有所帮助:

在我的代码中我实际使用了

rotationAnimation.fromValue
rotationAnimation.toValue

代替

rotationAnimation.byValue.

如果 toValue 小于 fromValue,则旋转总是逆时针。你的值(value)观是正面的还是负面的并不重要,重要的是它们之间的关系。

弄清楚你的起始角度是什么,弄清楚你想要旋转的方向,并弄清楚你的结束角度是什么。如果您想逆时针旋转,请确保它小于您的起始角度。下面是我用来制作时钟指针从 12:00 到当前时间的动画的代码。

-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];

[self updateClockArmAngle];
}

- (void)updateClockArmAngle
{
// Get the time
NSDate *date = [NSDate date];
NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"America/Toronto"]];
NSDateComponents* components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date];

CGFloat hour = [components hour];
CGFloat angle = (hour/24.0)*(2*M_PI);

CGFloat minute = [components minute];
angle += (minute/(24*60))*(2*M_PI);

[self rotateViewAnimated:self.clockArm withDuration:1.5 byAngle:angle];
}


- (void) rotateViewAnimated:(UIView*)view
withDuration:(CFTimeInterval)duration
byAngle:(CGFloat)angle
{
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.fromValue = 0;
rotationAnimation.toValue = [NSNumber numberWithFloat:angle];
rotationAnimation.duration = duration;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[rotationAnimation setRemovedOnCompletion:NO];
[rotationAnimation setFillMode:kCAFillModeForwards];
[view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

关于iphone - CGAffineTransformMakeRotation 总是逆时针旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791582/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com