- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图为 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/
我创建了一个 UIView 并将其图层的内容设置为图像。我在这个 View 中添加了一个点击手势。当我点击 View 时,我希望它旋转 180 度,当我单击关闭按钮时,我希望它旋转到原来的度数。但是当
这个问题已经存在: UIButton rotation not working 已关闭 9 年前。
我有一个 tableView,我使用 setTransform 方法和 CGAffineTransformMakeRotation 向左旋转 90 度: [horizontalModeTabl
有没有办法使用 CGAffineTranformMAkeRotation 围绕外部点旋转 UIImage?非常感谢! 最佳答案 这是一个使用与 CoreGraphics CGAffineTransfo
我试图为 UIImageView 设置动画,以便在用户触摸它并在其上顺时针移动手指时逆时针旋转。 基本上我希望 UIImageView 在触摸结束后回到原来的位置,它应该逆时针方向移动。 我遇到的问题
我想使用 Quartz 2D 绘制文本。 “菜单”方向错误。我希望“菜单”仍然可读并且与 X 轴呈 45 度角。下面是我的代码: CGContextSelectFont(context, "Arial
我有简单的旋转变换,结合 alpha,它在第一次调用时完美运行,但第二次不会发生旋转(用户通过点击屏幕启动此动画)。 这是我的基本动画功能: - (void) animateMe:(UIImageVi
如何使用 CGAffineTransformMakeRotation 手动将 View 旋转 180 度? 最佳答案 UIView *myView = [[UIView alloc] init]; [
我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。 我有一个自定义 UIView (带有自定义 xib)和四个 UILabel ,我想用这段代码将它们旋转 90 度: - (void)lay
我创建了一个图层并为其设置了一个框架。然后我对其应用 CGAffineTransformMakeRotation。这样做的结果是挤压对象,因为框架保持不变。如何旋转图层并重置框架,使其看起来不会被挤压
我正在尝试将 UILabel 旋转 45 度。我将 transform 属性设置为 CGAffineTransformMakeRotation(M_PI * 0.25) 但是当我这样做时,UILabe
为什么上面只有一个在代码中有效? 目前我正在使用以下... image.transform = CGAffineTransformMakeRotation(M_PI/2.5); image.trans
我有一个图像,我想围绕一个固定点来回悬挂(一次)。所以我有以下代码: [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDu
我正在使用 UIRotationGestureRecognizer 来旋转 View 。当我释放 View ,然后再次开始时,它会捕捉到 Identity 旋转,然后再返回旋转。我正在尝试找出如何让它
我想用一种带有旋转的淡入/淡出来替换 View 。这是我的功能 func animateSendButton(enter: Bool) { let rotation: CGFloat = en
我以前从未遇到过这种情况,无法弄清楚发生了什么。我怀疑它可能是自动布局,但我不知道如何。我有一个“指南针” View ,它有几个它自己管理的 subview (不是自动布局的一部分)。这是他们的设置示
CGAffineTransformMakeRotation() 在 iOS 7 上尝试将对象(标签、按钮等)旋转到不同于 90、180、360 等的角度时会生成一个奇怪的错误。 从 iOS 8 开始,
我正在使用 CGAffineTransformMakeRotation旋转 UIView在一个动画 block 中,我想将它逆时针旋转 180º . 但是当我放 myView.animateWithD
我有一个 UIImageView,它位于另一个 UIView 中。 我用类似的东西旋转 UIImageView: object.transform=CGAffineTransformMakeRota
我开始研究 Swift 的核心动画方法,并试图找出这两种方法之间的区别。我成功地使用 CGAffineTransformRotate 制作了一个正方形旋转,但我想知道另一个是用来做什么的。 我最好的猜
我是一名优秀的程序员,十分优秀!