【发布时间】:2014-03-30 01:42:09
【问题描述】:
我有一个 UIView selectFrame,它有四个角手柄作为子视图。每个角手柄都有一个 UIPanGestureRecognizer 调用此方法:
这是我的代码(其中 self 是 selectFrame UIView):
-(void)handleDrag:(UIPanGestureRecognizer *)gesture
{
UIView *view = gesture.view;
CGPoint translation = [gesture translationInView:view.superview];
CGRect frame = self.bounds;
switch (view.tag) {
case (DRAG_HANDLE_TAG): //upper left
frame.size.width -= translation.x;
frame.size.height -= translation.y;
break;
case (DRAG_HANDLE_TAG+1): //upper right
frame.size.width += translation.x;
frame.size.height -= translation.y;
break;
case (DRAG_HANDLE_TAG+2): //bottom left
frame.size.width -= translation.x;
frame.size.height += translation.y;
break;
case (DRAG_HANDLE_TAG+3): //bottom right
frame.size.width += translation.x;
frame.size.height += translation.y;
break;
}
self.bounds = CGRectIntegral(frame);
CGAffineTransform transform = self.transform;
transform = CGAffineTransformTranslate(transform, translation.x/2, translation.y/2);
self.transform = transform;
[gesture setTranslation:CGPointZero inView:view.superview];
}
这段代码在没有旋转的情况下工作得很好,但是随着 UIView 的旋转,它会漂移。
但是,如果我在手势结束时进行整个计算,则将
if (gesture.state != UIGestureRecognizerStateEnded)
return;
在方法的顶部,即使旋转也能很好地工作,所以看起来代码可以工作,但会不会是舍入错误?
这个问题似乎以许多不同的形式被问过,但经过数小时的寻找,我找不到一个确切的答案。有许多可以从中心调整大小的 StickerView 示例。这个问题Resize UIView While It Is Rotated with Transform 得到了一个非常完整的答案,但它并没有真正回答这个问题。
编辑:有很多建议使用三角函数,我已经尝试过,但在我看来,应该可以简单地使用 CGAffineTransforms。我已经尝试过这个,但没有好的结果。
【问题讨论】:
-
你能解决这个问题吗?
-
还没有 - 我被转移了,但最终会回到它。希望学习一些线性代数会有所帮助!
标签: ios uiview cgaffinetransform