我正在开发一个允许用户旋转时钟针的应用程序。因为我正在使用针的imageview的transform属性:
CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif);
minutesNeedle.transform = newTrans;
为了检测用户的触摸,我必须检测针的空间(分钟或小时的帧)。在这里,我的问题显示出来,在旋转图像后,它看起来像图像被拉伸并干扰另一个图像。 UIView类文档说,在转换后,视图的框架会发生变化,您必须使用中心和边界属性。但是,我不能使用bounds属性来检测位于superview中的touches用户。
有没有其他方法来做这个动画而不改变帧大小(我怀疑)。或者我可以在touchesEnded方法中调整帧的大小(我已经尝试但是徒劳)。请帮我堵一个星期!!感谢
答案 0 :(得分:1)
也许我错过了一些东西,但似乎你可以完全避免这种冲突。创建一个单独的视图来处理触摸,独立于针视图。在触摸事件中,适当移动针视图。这个单独的视图基本上是时钟的大小,并且覆盖在其他视图上,具有清晰的背景。它会有一个具有适当回调的委托,因此您的视图控制器(或任何拥有该针头)可以调整它。
就回调的内容而言,我只会转发触摸事件,如:
- (void)touchReceiverView:(TouchReceiverView *)view didReceiveTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
答案 1 :(得分:0)
使用CALayers做得更容易,性能也更好。
CALayer *handLayer = [CALayer layer];
handLayer.contents = (id)[UIImage imageNamed:@"hand.png"].CGImage;
handLayer.anchorPoint = CGPointMake(0.5,0.0)];
[myview.layer addSublayer:handLayer];
//i.e.: if handLayer represents the seconds hand then repeat this every second ;)
handLayer.transform = CGAffineTransformMakeRotation (angle); //set the angle here
有人写了ClockView sample using CALayers,也许你觉得它很有用。