【发布时间】:2011-08-30 20:29:14
【问题描述】:
我在使用 Core Animation 旋转 UIView 子类对象以响应 UISwipeGesture 时遇到问题。
描述上下文:我有一个圆形表盘,我用 CG 绘制并作为子视图添加到主视图中。 为了响应滑动手势,我指示它在任一方向上旋转 15 度,具体取决于它是向左还是向右滑动。
单向只能旋转一次的问题。识别出后续手势(从触发的其他动作中可以看出)但动画不会重复。我可以向左走一次,然后向右走一次。但是尝试多次朝任一方向前进是行不通的。这是相关代码,让我知道你的想法......
- (IBAction)handleLeftSwipe:(UISwipeGestureRecognizer *)sender
{
if ([control1 pointInside:[sender locationInView:control1] withEvent:nil])
{
//updates the display value
testDisplay.displayValue = testDisplay.displayValue + 0.1;
[testDisplay setNeedsDisplay];
//rotates the dial
[UIView animateWithDuration:0.25 animations:^{
CGAffineTransform xform = CGAffineTransformMakeRotation(radians(+15));
control1.transform = xform;
[control1 setNeedsDisplay];
}];
}
【问题讨论】:
-
我将研究下面的答案,但只是为了使事情进一步复杂化...... UIView 表盘有阴影。旋转视图也会旋转阴影。我想我需要一种方法将 CTM(变换矩阵)上的位置恢复 15 度并重新绘制它以避免阴影问题?我不知道如何在视图的 drawRect 方法之外设置更改 CTM。我无法在视图控制器中引用视图的图形上下文。我认为。我可能是错的......
-
所以你想旋转表盘而不是阴影?表盘和影子在同一个视图中吗?
-
对这两个问题都是肯定的。我可以在带有阴影的表盘下方放置另一个视图,以便除了阴影之外它被隐藏,并使用我们讨论过的计数器方法。只是我不敢相信没有办法重置变换矩阵。我浏览过文档,但看不到任何东西。也许这只是我需要接受的东西。
-
这是一种解决方法,不过您可能会对此感兴趣。 stackoverflow.com/questions/469505/…
-
这是一个有趣的话题。我担心的是他们讨论了 CGGetContext,我只能从视图的 drawRect 方法内部进行。我需要从主视图控制器执行此操作。嗯……我要睡了。
标签: ios cocoa-touch uiview core-animation