2013-10-05 47 views
3

我想我的UITextView工作,看起来类似于裁剪实用程序(请参阅下面的图像示例),但我找不到正确的方法如何使用视图的边缘移动,旋转,调整我的观点:UIGestureRecognizer用于旋转,调整大小,移动UIView边缘



我成功地应用于UIGestureRecognizer s到我的整个UITextView移动(或平移)和旋转,但是当业务涉及到边缘的功能,所有4个节点要么举动,旋转或调整视图大小,因为节点很难完全发挥作用,所以我陷入了困境。我尝试了两种方法:

1.将所有4个节点添加为UIImageView作为子视图UITextView当节点一半在UITextView边缘外时,我使用clipsToBound = NO;使它们显示正确。但是,视图外部的节点没有响应触摸。然后我试图溶液2 ...

2.裹UITextView容器UIView内,并加入4个节点的每个边和UITextView适当地定位的内部。有了这个,我实现了良好的用户界面,但手势识别器仍然没有工作,因为它们可能嵌套得太深,因为它是另一个已经具有手势识别器的视图的子视图。这需要更多的调查,但我觉得这种方法有点复杂。

我是否正确?也许,UIGestureRecognizer不是我想实现这个目标的正确解决方案。如果有人有类似的工作经验,请指出正确的方向。我不是寻找代码而是想法...

回答

0

方法1不会工作(没有一些黑客行为),因为UIView的命中测试没有响应超出界限的触摸。 (对于破解见interaction beyond bounds of uiview

方法#3是正确的,你应该继续追求它。但是,您可以尝试在自定义UIView子类上使用touchesBegan:withEvent:

我的想法:

  1. 我已经实现了使用下面的技术类似的调整控制。与手势识别器相比,您有更多的控制权,因为正常的UIGestureRecognizers往往会有一些最小的距离开始响应,在这种情况下这并不理想,因为您希望附近即时响应。另外,你知道你已经有了一些手势识别器,所以你不太可能发生冲突。

  2. 许多人可能会建议您设计自己的UIGestureRecognizer来封装和解决上面列出的一些问题。这可能是一个更简洁的方法,但你只需要要实现几个UIGestureRecognizer委托方法如

    • gestureRecognizerShouldBegin:gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:防止与其他手势识别同时互动。 您可能还需要一些手势识别器,只有在其他人失败时才会激活,使用requireGestureRecognizerToFail:

也许你可以用#1开始,得到它的工作,然后,理想情况下,重构为#2。为理念1

typedef enum { 
    HandleTopLeft, 
    HandleTopRight, 
    HandleBottomLeft, 
    HandleBottomRight 
} 
HandlePosition; //you will need fewer 

@protocol SizingHandleDelegate; 

@interface SizingHandle : UIView 
@property (nonatomic, assign) id<SizingHandleDelegate> delegate; 
@property (nonatomic, assign) HandlePosition position; 
@end 


@protocol SizingHandleDelegate <NSObject> 

- (void)touchesBeganForSizingHandle:(SizingHandle*)sizingHandle; 
- (void)touchesEndedForSizingHandle:(SizingHandle*)sizingHandle; 

@end 

示例代码你SizingHandle类应该重写touchesBegan:withEvent:touchesEnded:withEvent:和这些消息转发给他们的代表。然后代表应该能够应用正确的逻辑。

此外,您可能需要处理用户每次触摸多个SizingHandle的用例。

+0

谢谢您的宝贵意见。 – Vad

0

当我有这样的要求时,我尝试使用下面的链接示例代码之一来实现这一点,这真的有所帮助。

CropImageSampleCodes

相关问题