ios - 如何剪切或禁用 UIView 的一部分?

标签 ios uiview uibezierpath

我有一个 UIView 的自定义子类,LineDrawingView。我在主视图 Controller 中将其作为 @property 并将其添加到 View 中。这工作得很好 - 它在当前 View 之上创建一个透明 View ,并使用 UIBezierPath、touchesBegan、touchesMoved 等,因此您可以通过拖动手指来在整个 View 上绘制。

我需要将绘图 View 设为“L”形,这样我就可以在左下角有一个区域来放置各种控件。我想不出有什么办法可以使绘图 View 成为“L”形,除了添加两个单独的矩形绘图 View 之外,但这不起作用,因为当您将手指从一个矩形拖动到另一个矩形时,触摸会被中断。我提出的另一个解决方案是在绘图 View 之上添加另一个 View 。此 View 应该阻止绘图,并且我还可以在其中找到我的控件,以便在启用绘图时它们仍然可用。

我尝试创建一个 UIView 并将其添加为绘图 View 的 subview 。我给它上了一个色调,这样我就可以检查它是否存在并且位于正确的位置。我预计这会阻止在新 UIView 的区域内进行绘制,但在 LineDrawingView 的整个区域内继续进行绘制。我还尝试在索引 2 处插入新的 UIView,并在索引 1 处插入 LineDrawingView。它仍然没有影响绘图。

    self.drawView = [[LineDrawingView alloc] initWithFrame:CGRectMake(0, 50, 768, 905)];
    [self.drawView setBackgroundColor:[UIColor clearColor]];

    // not effective in preventing drawing!!
    UIView *controlView = [[UIView alloc] initWithFrame:CGRectMake(0, 530, 310, 575)];
    [controlView setUserInteractionEnabled:NO];
    [controlView setBackgroundColor:[UIColor grayColor]];
    [controlView setAlpha:0.3];

    [self.view addSubview:drawView];
    [self.drawView addSubview:controlView];

我很想知道:我怎样才能...

创建“L”形绘图 View ? 或者 剪下绘图 View 的一部分,以便用户可以与其后面的内容进行交互? 或者 在绘图 View 顶部强加一个区域,我可以在其中禁用绘图并添加控件?

最佳答案

Here is a tutorial on creating a transparent rounded rectangle UIView ,我认为你可以直接修改它,使其成为 L 形。

最重要的是要记住,您必须实现自己的 drawRect 并且我相信也是您自己的 hitTest或触摸(例如 touchedBegan:withEvent: 等事件处理)方法。

关于ios - 如何剪切或禁用 UIView 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740653/

相关文章:

ios - 通缉解释 : Concept of passing data between UIViewController and UIView

iphone - 创建阴影 View

swift - iOS - 将 UIBezierpath 的 lineJoinStyle 设置为 .round 不起作用 (SWIFT)

ios - NSLayoutFormatOptions 没有成员 'allZeros' 错误

ios - 我的 UISearchBar 移动到顶部(动画)--> 想要禁用

uiview - 将 UIView 保存为透明 PNG

ios - 如何在 Swift 上使用 UIbezierPath 制作通用圆形绘图(使用 lineDashPattern)

javascript - JavaScript 中的 try-catch : how to get stack trace or line number of the original error

ios - UIAlertView 的 UIAlertViewStylePlainTextInput 自定义字体在 iOS 中不起作用

ios - CAShapeLayer 可以传递给 CGContextDrawLayerAtPoint 吗?