我正在开发一个绘图应用程序。
问题在于旋转。我的移动和大小调整工作良好。
我以前用的是一个相当复杂的、内存/处理器密集型的过程,现在我正在尝试改进。
我找了又找,但没有找到一个和我想做的相似的答案。
基本上,假设用户在“曲面”上放置了一个正方形。然后,他们敲打它,并得到一些处理。它们可以触摸任何位置并平移以移动正方形(已工作),触摸并拖动调整大小手柄以调整正方形大小(已工作),或抓住旋转手柄以使正方形围绕其中心旋转。
我已经研究过使用UIBezierPath绘制正方形,或者只是让它成为我填充的UIView的一个子类。
无论是哪种情况,我都试图旋转UIView本身,而不是内部的某些内容。每次我试图旋转视图时,要么什么都没有发生,要么视图离开屏幕,要么它只是稍微旋转一下然后停止。
下面是我尝试过的一些代码(这不起作用,我尝试了很多不同的方法):
- (void) rotateByAngle:(CGFloat)angle
{
CGPoint cntr = [self center];
CGAffineTransform move = CGAffineTransformMakeTranslation(-1 * cntr.x, -1 * cntr.y);
[[self path] applyTransform:move];
CGAffineTransform rotate = CGAffineTransformMakeRotation(angle * M_PI / 180.0);
[[self path] applyTransform:rotate];
[self setNeedsDisplay];
CGAffineTransform moveback = CGAffineTransformMakeTranslation(cntr.x, cntr.y);
[[self path] applyTransform:moveback];
}
如果不明显,这里的想法是将视图移动到原点(0,0),围绕该点旋转,然后将其移回。
如果你想知道,“角度”的计算是正确的。我还将上面的代码包装在
[UIView beginAnimations:nil context:NULL]
/
[UIView commitAnimations]
封锁。
是否可以执行这种旋转“实时”响应uitouchs?我需要在UIView的图层中将正方形作为一个项目绘制并旋转图层吗?
你知道吗,我以前做的是用一组线画出一个形状
UIBezierPaths
. 我会申请
CGAffineTransform
然后调用drawRect:方法,该方法将在自定义UIView中重新绘制对象。这个UIView将包含相当多的这些项,所有这些项都需要在其中一个项需要时重新绘制。
思想?
谢谢!