我希望我UITextView
的工作和看起来与裁剪实用程序类似(请参见下图示例),但是我找不到正确的方法来使用视图的边缘移动,旋转和调整视图大小:
我成功地将UIGestureRecognizer
s应用于整个对象UITextView
以移动(或平移)和旋转它,但是当涉及到边缘功能(所有4个节点都将移动,旋转或调整视图大小)时,我陷入困境,因为节点难以充分发挥作用。我尝试了2种方法:
1.将的所有4个节点添加UIImageView
为的子视图UITextView
。当节点位于外UITextView
边缘的一半时,我通常clipsToBound = NO;
使它们正确显示。但是,视图外部的节点无法响应触摸。然后我尝试了解决方案2 ...
2.包装UITextView
在容器中,UIView
并为每个边缘添加4个节点,并UITextView
正确放置在内部。这样,我获得了良好的UI,但是手势识别器仍然无法正常工作,因为它们可能嵌套在一个视图中,而该视图是另一个已有手势识别器的视图的子视图。这需要更多的调查,但我觉得这种方法有点太复杂了。
我走对了吗?也许UIGestureRecognizer
这不是我要实现的目标的正确解决方案。如果有人有使用类似产品的经验,请指出正确的方向。我不是在寻找代码而是想法...
方法1不起作用(没有任何黑客手段),因为UIView的点击测试不会响应其边界之外的触摸。(有关hack,请参见uiview之外的交互)
方法3是正确的,您应该继续追求它。但是,您可以尝试在自定义UIView子类上使用touchesBegan:withEvent:。
我的想法:
我已经使用以下技术实现了类似的大小调整控件。与手势识别器相比,您具有更多的控制权,因为普通的UIGestureRecognizer倾向于具有开始响应的最小距离,在这种情况下,由于您想要近乎即时的响应,因此在这种情况下并不理想。另外,知道您已经有一些手势识别器,您就不太可能发生冲突。
许多人可能会建议您设计自己的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的用例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句