我有一个 UIView 选择框,它有四个角落句柄作为子视图。每个角落句柄都有一个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应该是可能的。我已经进行了实验,但没有好的结果。