CGAffineTransformRotate大小问题

时间:2012-10-05 22:54:00

标签: ios cocoa-touch uiimageview rotation cgaffinetransform

我正在开发一个允许用户旋转时钟针的应用程序。因为我正在使用针的imageview的transform属性:

CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); minutesNeedle.transform = newTrans;

为了检测用户的触摸,我必须检测针的空间(分钟或小时的帧)。在这里,我的问题显示出来,在旋转图像后,它看起来像图像被拉伸并干扰另一个图像。 UIView类文档说,在转换后,视图的框架会发生变化,您必须使用中心和边界属性。但是,我不能使用bounds属性来检测位于superview中的touches用户。

有没有其他方法来做这个动画而不改变帧大小(我怀疑)。或者我可以在touchesEnded方法中调整帧的大小(我已经尝试但是徒劳)。请帮我堵一个星期!!感谢

2 个答案:

答案 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,也许你觉得它很有用。