gpt4 book ai didi

iphone - 用于旋转、调整大小、在 UIView 边缘移动的 UIGestureRecognizer

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:20 27 4
gpt4 key购买 nike

我希望我的 UITextView 能够工作并且看起来类似于裁剪实用程序(参见下面的图像示例),但是我找不到如何使用 View 的边缘移动、旋转和调整 View 大小的正确方法:



我成功地将 UIGestureRecognizer 应用于我的整个 UITextView 以移动(或平移)和旋转它,但是当业务涉及边缘功能时,所有 4 个节点要么移动、旋转或调整 View 大小时,我会卡住,因为节点很难完全发挥作用。我尝试了两种方法:

<强>1。将所有 4 个节点添加为 UIImageView 作为 UITextView 的 subview 。 当节点一半在 UITextView 边缘之外时,我使用了 clipsToBound = NO; 使它们正确显示。但是, View 外的节点不响应触摸。然后我尝试了解决方案 2...

<强>2。将 UITextView 包裹在容器 UIView 中,并为每条边添加 4 个节点,并将 UITextView 正确定位在内部。 这样我实现了良好的 UI,但是手势识别器仍然无法正常工作,因为它们可能嵌套在一个 View 中太深,而该 View 是另一个已经具有手势识别器的 View 的 subview 。这需要更多调查,但我觉得这种方法有点太复杂了。

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

最佳答案

方法 1 不会起作用(如果没有一些黑客攻击),因为 UIView 的 HitTest 不会响应超出其范围的触摸。 (对于 hack,请参阅 interaction beyond bounds of uiview)

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

我的想法:

  1. 我已经使用以下技术实现了类似的大小调整控件。你比手势识别器有更多的控制,因为普通的 UIGestureRecognizers 往往有一些最小距离,它们开始响应,这在这种情况下并不理想,因为你想要即时响应。此外,您知道自己已经有了一些手势识别器,就不太可能发生冲突。

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

    • 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 的用例。

关于iphone - 用于旋转、调整大小、在 UIView 边缘移动的 UIGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com