菜鸟教程小白 发表于 2022-12-13 16:21:00

uiview - 基于 UITouch 旋转 UIView


                                            <p><p>我正在开发一个绘图应用程序。 </p>

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

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

<p>我之前使用相当复杂且内存/处理器密集型的过程来完成此操作,现在我正在尝试改进。</p>

<p>我已经搜索和搜索,但没有找到与我正在尝试做的类似的答案。</p>

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

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

<p>在任何一种情况下,我都试图旋转 UIView 本身,而不是里面的一些内容。每次我尝试旋转 View 时,要么什么都没有发生,要么 View 腾出屏幕,要么只旋转一点点然后停止。</p>

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

<pre><code>- (void) rotateByAngle:(CGFloat)angle
{

CGPoint cntr = ;

CGAffineTransform move= CGAffineTransformMakeTranslation(-1 * cntr.x, -1 * cntr.y);
[ applyTransform:move];

CGAffineTransform rotate = CGAffineTransformMakeRotation(angle * M_PI / 180.0);
[ applyTransform:rotate];

;
CGAffineTransform moveback = CGAffineTransformMakeTranslation(cntr.x, cntr.y);
[ applyTransform:moveback];

}
</code></pre>

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

<p>如果您想知道,“角度”的计算是正确的。我还将上面的代码包装在 <code></code>/<code></code>block 中。</p>

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

<p>是否可以“实时”执行这种旋转以响应 UITouches?我需要在 UIView 的图层中将正方形绘制为项目并旋转图层吗?</p>

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

<p>所以,我试图通过创建一堆 UIView 子类来提高应用程序的性能,这些子类只会在用户对其进行操作时获得重新绘制的命令。 Apple 的 iPad 主题演讲似乎使用 UIGestureRecognizers 来实现这一点,因为您必须使用两根手指来旋转添加的形状。这是要走的路吗?</p>

<p>想法?</p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><pre><code>-(void)rotate{
    CGAffineTransform transform;
    ;
    ;
    ;
    myView.alpha = 1;
    transform = CGAffineTransformRotate(myView.transform,0.5*M_PI);
    ;
    myView.transform = transform;
    ;
}
</code></pre>

<p>这可能会有所帮助。</p></p>
                                   
                                                <p style="font-size: 20px;">关于uiview - 基于 UITouch 旋转 UIView,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/3948940/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/3948940/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: uiview - 基于 UITouch 旋转 UIView