0

我正在尝试按照本教程制作绘图应用程序:http ://www.effectiveui.com/blog/2011/12/02/how-to-build-a-simple-painting-app-for-ios/ ,并且然后我试图让它不仅在整个屏幕上绘制,而且只在另一个 UIView 内部的 UIView 上绘制。(我称之为嵌套的 UIView)

我的代码目前在 github 上:https ://github.com/sammy0025/SimplePaint

我用教程中的原始代码调整的唯一部分是更改一些类前缀名称,启用 ARC 所以没有 deallocs,使用故事板(与教程中的原始代码一起工作),并在主视图控制器中更改此代码实现文件(SPViewController.m):

-(void)viewDidLoad
{
    [super viewDidLoad];
    nestedView.backgroundColor=[UIColor colorWithWhite:0 alpha:0]; //This is to make the nested view transparent
    SPView *paint = [[SPView alloc] initWithFrame:nestedView.bounds]; //original code is SPView *paint=[[SPView alloc] initWithFrame:self.view.bounds];
    [nestedView addSubview:paint]; //original code is [self.view addSubview:paint];
}

我的问题是如何确保我只在嵌套的 UIView 内绘制?

4

2 回答 2

0

将剪辑添加到您的子视图。例如self.bounds将覆盖视图的整个区域。

UIBezierPath *p = [UIBezierPath bezierPathWithRect:self.bounds];
[p addClip];

我相信视图的剪辑最初应该基于边界,并且您可以通过添加新剪辑来缩小它。但这里的 iOS 和 OS X 之间可能存在差异。

于 2013-05-25T15:37:35.810 回答
0

与其在嵌套视图中使用 SPView,不如考虑更改 SPView 的框架以匹配您想要的。这应该可以解决您只允许在给定矩形内绘图的问题。我认为您会因为情节提要配置而遇到问题。我对故事板了解不多,但我能够通过抛出故事板的视图并在 viewDidAppear 中构建我自己的视图来以编程方式工作。

-(void)viewDidAppear:(BOOL)animated{

    UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds];
    newView.backgroundColor = [UIColor greenColor];

    SPView *newPaint = [[SPView alloc] initWithFrame:CGRectInset(self.view.bounds, 40,40)];

    [newView addSubview:newPaint];

    self.view = newView;
}

重建视图的屏幕截图

于 2013-05-25T17:01:10.450 回答