gpt4 book ai didi

uiview - 基于 UITouch 旋转 UIView

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:34:44 29 4
gpt4 key购买 nike

我正在开发一个绘图应用程序。

我希望用户能够在屏幕上“放下”一个形状,然后根据需要移动、调整大小或旋转它。

问题在于旋转。我的移动和调整大小工作正常。

我以前用一个相当复杂的内存/处理器密集型过程来做这件事,我现在正在努力改进它。

我搜索了又搜索,但没有找到与我正在尝试做的类似的答案。

基本上,假设用户在“表面”上放置了一个正方形。然后,他们轻敲它并获得一些 Handlebars 。他们可以触摸任何地方并平移以移动正方形(已经开始工作),触摸并拖动调整大小 handle 以调整正方形大小(已经开始工作),或者捕获旋转 handle 让正方形围绕其中心旋转。

我研究过使用 UIBezierPath 绘制正方形,或者只是让它成为我填充的 ​​UIView 的子类。

无论哪种情况,我都试图旋转 UIView 本身,而不是其中的某些内容。每次我尝试旋转 View 时,要么没有任何反应,要么 View 离开屏幕,要么旋转一点点就停止了。

这是我试过的一些代码(这行不通,我已经尝试了很多不同的方法):

- (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];

}

如果不是很明显,这里的想法是将 View 移动到原点 (0,0),围绕该点旋转然后将其移回。

如果您想知道,“角度”的计算是正确的。我还将上面的代码包装在 [UIView beginAnimations:nil context:NULL]/[UIView commitAnimations] block 中。

是否可以将 UIView 旋转“自定义”量?我之前看过/做过它,我在其中设置了旋转控件的动画,但在那些示例中,控件总是以“正方形”结束(即,它旋转了 1 个或多个完整的圆圈并返回到其起始方向)。

是否可以“实时”执行此旋转以响应 UITouches?我是否需要将正方形绘制为 UIView 层中的项目并改为旋转层?

如你所知,我之前的工作是由一组线或 UIBezierPaths 绘制的形状。我会将 CGAffineTransform 应用于数据,然后调用 drawRect: 方法,该方法会在自定义 UIView 中重新绘制对象。此 UIView 将承载相当多的此类项目,所有这些项目都需要在其中一个需要时重新绘制。

所以,我试图通过创建一堆 UIView 子类来提高应用程序的性能,这些子类只会在用户对它们执行某些操作时获得重新绘制的命令。 Apple 的 iPad Keynote 似乎使用 UIGestureRecognizers 来完成此操作,因为您必须使用两根手指来旋转添加的形状。这是要走的路吗?

想法?

谢谢!

最佳答案

-(void)rotate{
CGAffineTransform transform;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationOptionBeginFromCurrentState];
myView.alpha = 1;
transform = CGAffineTransformRotate(myView.transform,0.5*M_PI);
[myView setUserInteractionEnabled:YES];
myView.transform = transform;
[UIView commitAnimations];
}

这可能会有所帮助。

关于uiview - 基于 UITouch 旋转 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948940/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com