2013-05-25 5 views
0

Я пытаюсь сделать приложение для рисования после этого урока: http://www.effectiveui.com/blog/2011/12/02/how-to-build-a-simple-painting-app-for-ios/, а затем я попытался сделать его таким, чтобы я не только рисовал на весь экран, но только на UIView, который внутри другого 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?

ответ

0

Добавить обрезку на ваш дополнительный вид. Например. self.bounds будет охватывать всю область обзора.

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

Я считаю отсечение для представления должно быть основан на границах первоначально, и что вы можете уменьшить его путем добавления новой вырезки. Но здесь может быть разница между iOS и OS X.

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; 
} 

screenshot of rebuilt view

+0

Просто спрашиваю, хотя я сделал код работы, но как я могу сделать холст прозрачным? (Так что я могу наложить его на другое изображение и т. Д.)? –

Смежные вопросы