2014-01-15 4 views
2

ладно, вот-вот урод ...ясно UIView рисунок из UIImage

сделать приложение для рисования: Главного вида (кнопки, объявление и т.д.) то вид контейнера занимает часть экрана (с пользовательский класс рисования) Когда пользователь нажимает кнопку в главном окне, он запускает событие в виде контейнера (возможно, это лучший способ сделать это, но я не могу найти его)

Как пользователь нажимает где-то внутри в контейнер он записывает точку, добавляет строку и затем обновляет метод draw: rect:

- (void)drawRect:(CGRect)rect 
{ 
    [incImage drawInRect:rect]; 
    [path stroke]; 
} 

(как пользователь рисует, то UIImage ('incImage') добавляется на и как это делает, она окрашена на взгляд)

рисования Код:

- (void)drawBitmap 
{ 
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0); 
    [[UIColor colorWithRed:_brushR green:_brushG blue:_brushB alpha:_brushO] setStroke]; 
    [incImage drawAtPoint:CGPointZero]; 
    [path stroke]; 
    incImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

Однако я могу» t очистить представление! Я попытался расколоть дро: метод Rect в 2 секции (если ясно, правда, и если это не так) и как это сделать:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0); 
rectpath = [UIBezierPath bezierPathWithRect:CGRectMake(0,0,incImage.size.width,incImage.size.height)]; 
[[UIColor whiteColor] setFill]; 
[rectpath fill]; 
[incImage drawAtPoint:CGPointZero]; 
incImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
_clear=true; 
[self setNeedsDisplay]; 

затем изменить Жеребьевка: Rect в:

- (void)drawRect:(CGRect)rect 
{ 
    if (clear) { 
     [incImage drawInRect:rect]; 
     [rectpath fill]; 
    } 
    else { 
     [incImage drawInRect:rect]; 
     [path stroke]; 
    } 
} 

но он не работает (я также попытался создать CGRect, а затем заполнил его белым и сделал это изображение и попытался нарисовать это изображение для просмотра, но не повезло). Я также проверил, и проблема не в том, что методы представления и вызова Main вид из представления контейнера, что-то не так с тем, как я пытаюсь это сделать или мой метод draw.

Любая помощь будет принята с благодарностью, жизнь моего Mac может зависеть от него :)

+0

Вы убираете место где угодно? Я не вижу этого, но не уверен, что мы видим весь код. Если нет, добавьте это в свой drawRect: CGContextClearRect (ctx, rect); – Travis

+0

Я попытался сделать это в моей ничьей: rect метод: - (void) drawRect: (CGRect) rect { если (!_clr) { [incImage drawInRect: rect]; [ход хода]; } if (_clr) { CGContextClearRect (UIGraphicsGetCurrenttext(), rect); incImage = UIGraphicsGetImageFromCurrentImageContext(); [incImage drawInRect: rect]; } } 0 ничего не найдено – blindman457

ответ

0

Когда -drawRect: называется, вид уже будет стерта. Похоже, вы записываете очки, добавляя их к path. Когда вы хотите «очистить» представление, вам нужно обновить объект, который хранит данные, которые визуализируются, - в вашем случае это, вероятно, означает сброс path либо путем вызова -removeAllPoints, либо путем простого удаления старого пути и начала с новенький.

+0

Я вижу, что вы говорите, но это не помогает проблеме, о чем я должен заявить, так как пользователь рисует, местоположения точек записываются в «путь» и затем они рисуются, как только пользователь поднимает свой палец с экрана «путь» имеет все удаленные точки (поэтому, когда пользователь снова рисует, он только рисует новые строки, а не все, или, по крайней мере, так я понимаю) поэтому я не вижу, как это будет работать. – blindman457

+0

Да, подробное описание проблемы всегда помогает. Похоже, вы создаете новый путь всякий раз, когда начинается новое прикосновение, добавление точек в путь по мере приближения касания и уничтожение пути, когда заканчивается прикосновение? В любом случае, внимательно посмотрите на то, что происходит с объектом пути по мере продвижения касания и после его завершения. Как путь сохраняется? (Если он не хранится, это часть проблемы.) Возможно, вы захотите прочитать на [Model View Controller] (https://developer.apple.com/library/ios/documentation/general/conceptual/ devpedia-cocoacore/MVC.html), поскольку он используется в iOS. – Caleb

1

Создать функцию, как это:

-(void) clearDrawing { 
    incImage = nil; 
    [self setNeedsDisplay]; 
} 

Это удалит incImage, поэтому он больше не будет отображаться в -(void) drawRect. И если вы хотите снова показать что-то еще, вы можете позвонить -(void)drawBitmap, который выполнит это: incImage = UIGraphicsGetImageFromCurrentImageContext();, а incImage будет снова создан с помощью некоторого рисунка.

+0

Это было бы лучшим ответом, если бы вы отредактировали его, чтобы объяснить, почему он работает. – Teepeemm

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