Iphone UIGestureRecognitor,用于在UIView的边上旋转、调整大小和移动
我希望我的Iphone UIGestureRecognitor,用于在UIView的边上旋转、调整大小和移动,iphone,ios,objective-c,uigesturerecognizer,Iphone,Ios,Objective C,Uigesturerecognizer,我希望我的UITextView能够正常工作并看起来像裁剪工具(请参见下面的图像示例),但我找不到正确的方法来使用视图的边缘移动、旋转和调整视图大小: 我成功地将uigesturecognizers应用于我的整个UITextView以移动(或平移)和旋转它,但当业务涉及到边缘功能时,所有4个节点都会移动、旋转或调整视图大小,我会陷入困境,因为节点很难完全发挥功能。我尝试了两种方法: 1。将所有4个节点添加为UIImageView,作为UITextView的子视图,当节点位于我使用的UITextV
UITextView
能够正常工作并看起来像裁剪工具(请参见下面的图像示例),但我找不到正确的方法来使用视图的边缘移动、旋转和调整视图大小:
我成功地将
uigesturecognizer
s应用于我的整个UITextView
以移动(或平移)和旋转它,但当业务涉及到边缘功能时,所有4个节点都会移动、旋转或调整视图大小,我会陷入困境,因为节点很难完全发挥功能。我尝试了两种方法:
1。将所有4个节点添加为UIImageView
,作为UITextView
的子视图,当节点位于我使用的UITextView
边缘的一半时clipsToBound=NO代码>以使它们显示在右侧。但是,视图外的节点不响应触摸。然后我尝试了解决方案2
2。将UITextView
包装在容器UIView
中,并为每个边添加了4个节点,并将UITextView
正确放置在内部。通过此操作,我获得了良好的UI,但手势识别器仍然无法正常工作,因为它们可能嵌套在视图中太深,而该视图是另一个已经存在的视图的子视图有手势识别器。这需要更多的调查,但我觉得这个方法有点太复杂了
我走对了吗?也许,UIGestureRecognizer
不是我想要实现的目标的正确解决方案。如果有人有类似的工作经验,请给我指出正确的方向。我不是在寻找代码,而是想法 方法1无法工作(如果没有一些黑客攻击),因为UIView的命中测试不会对超出其边界的触碰做出响应。(有关黑客的信息,请参阅)
方法#3是正确的,你应该继续追求它。但是,您可以尝试在自定义UIView子类上使用touchesbreated:withEvent:
我的想法是:
我使用下面的技术实现了一个类似的调整大小控件。与手势识别器相比,您有更多的控制权,因为正常的手势识别器往往有一些最小的开始响应距离,这在本例中并不理想,因为您需要接近即时的响应。此外,您不太可能有冲突,因为您已经有了一些手势识别器
许多人可能会建议您设计自己的UIgestureRecognitor来封装和解决我上面概述的一些问题。这可能是一种更干净的方法,但您只需要实现几个UIgestureRecognitor委托方法,例如
手势识别器应开始:
和手势识别器:应与手势识别器同时识别:
,以防止与其他手势识别器同时交互。
您可能还需要使用requiregestrerecognizertofail:
要求某些手势识别器仅在其他手势识别器失败时激活李>
也许你可以从#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
typedef枚举{
扶手左,
手握正确,
车把底部左,
车把底部右侧
}
手位//你将需要更少的时间
@协议大小和删除;
@接口大小句柄:UIView
@属性(非原子,赋值)id委托;
@属性(非原子,赋值)手柄位置;
@结束
@协议大小调整和删除
-(无效)触摸BeganforSizingHandle:(SizingHandle*)SizingHandle;
-(无效)触摸指定手柄:(SizingHandle*)SizingHandle;
@结束
SizingHandle类应覆盖触摸开始:withEvent:
和触摸结束:withEvent:
:,并将这些消息转发给其代理。然后,代理应该能够应用正确的逻辑
另外,您可能希望处理用户一次触摸多个SizingHandle的用例。当我有这样的要求时,我尝试使用下面链接中的一个示例代码来实现这一点,它确实很有帮助
感谢您的宝贵意见。