1

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

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

为了检测用户的触摸,我必须检测针的空间(分钟或小时的帧)。在这里我的问题很明显,在旋转图像后,它看起来像被拉伸并干扰了其他图像。UIView 类文档说,在转换视图的框架更改后,您必须使用中心和边界属性。但是,我不能使用 bounds 属性来检测位于超级视图中的触摸用户。

有没有其他方法可以在不改变帧大小的情况下做这个动画(我怀疑)。或者我可以在 touchesEnded 方法中调整框架的大小(我试过但没有成功)。请帮助我在那里阻塞一个星期!谢谢

4

2 回答 2

1

也许我遗漏了一些东西,但似乎你可以完全避免这种冲突。创建一个单独的视图来处理触摸,独立于针视图。在触摸事件上,适当地移动针视图。这个单独的视图本质上是时钟的大小,并覆盖在其他视图上,具有清晰的背景。它会有一个带有适当回调的委托,以便您的视图控制器(或任何拥有针头的东西)可以调整它。

至于回调是什么,我只会转发触摸事件,例如:

    - (void)touchReceiverView:(TouchReceiverView *)view didReceiveTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
于 2012-10-05T23:15:01.310 回答
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


有人使用 CALayers 编写了 ClockView 示例,也许你觉得它很有用。

于 2012-10-08T11:03:25.500 回答