Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于UITouch旋转UIView_Uiview_Ios_Rotation_Uigesturerecognizer - Fatal编程技术网

基于UITouch旋转UIView

基于UITouch旋转UIView,uiview,ios,rotation,uigesturerecognizer,Uiview,Ios,Rotation,Uigesturerecognizer,我正在开发一个绘图应用程序 我希望用户能够在屏幕上“放下”一个形状,然后根据需要移动、调整大小或旋转它 问题在于旋转。我有移动和调整工作的罚款 我以前是用一个相当复杂的内存/处理器密集型的过程来实现这一点的,现在我正在尝试改进这个过程 我搜索了又搜索,但是没有找到一个和我想做的类似的答案 基本上,假设用户在“曲面”上放置一个正方形。然后,他们点击它,得到一些手柄。他们可以触摸任意位置并平移以移动正方形(已工作),触摸并拖动调整大小手柄以调整正方形大小(已工作),或抓住旋转手柄以使正方形围绕其中心

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

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

问题在于旋转。我有移动和调整工作的罚款

我以前是用一个相当复杂的内存/处理器密集型的过程来实现这一点的,现在我正在尝试改进这个过程

我搜索了又搜索,但是没有找到一个和我想做的类似的答案

基本上,假设用户在“曲面”上放置一个正方形。然后,他们点击它,得到一些手柄。他们可以触摸任意位置并平移以移动正方形(已工作),触摸并拖动调整大小手柄以调整正方形大小(已工作),或抓住旋转手柄以使正方形围绕其中心旋转

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

无论哪种情况,我都试图旋转UIView本身,而不是其中的一些内容。每次我尝试旋转视图时,要么什么都没有发生,要么视图清空屏幕,要么只是稍微旋转一点并停止

以下是我尝试过的一些代码(这不起作用,我尝试了很多不同的方法):

如果不明显,这里的想法是将视图移动到原点(0,0),围绕该点旋转,然后向后移动

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

是否可以将UIView旋转“自定义”数量?我以前见过/做过这样的事情,我将控件设置为旋转动画,但在这些示例中,控件总是以“方形”结束(即,它旋转了一个或多个整圈,并返回到其起始方向)

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

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

因此,我试图通过创建一系列UIView子类来提高应用程序的性能,这些子类只有在用户对应用程序执行某些操作时才能获得重新绘制的命令。苹果的iPad基调似乎是通过UIgestureRecognitors来实现的,因为你必须用两个手指来旋转一个附加的形状。这是路吗

想法

谢谢

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

这可能会有所帮助。

对于简单的旋转,您可以省略动画:

-(void)rotate:(CGFloat)angle
{
    CGAffineTransform  transform = CGAffineTransformRotate( myView.transform, angle * M_PI / 180.0 );
    myView.transform = transform;
}

我使用一个简单的NSTimer来控制动画。

苹果的示例应用程序(非Touchs_Classic)演示了如何使用平移、收缩和旋转手势识别器轻松完成所有这些操作。是的。。。我发现,大约10分钟后,张贴这一点。我在大约6个小时的搜索后发布了这个。很抱歉
-(void)rotate:(CGFloat)angle
{
    CGAffineTransform  transform = CGAffineTransformRotate( myView.transform, angle * M_PI / 180.0 );
    myView.transform = transform;
}