iPhone - Рисование на экране в ответ на сенсорное событие - PullRequest
1 голос
/ 09 ноября 2011

Я работаю над заданием для класса, и мне нужно немного руководства. Я работаю с приложением, которое преобразует событие касания и последующее перетаскивание пальцем в рисунок на экране. Мне нужно выяснить, как сохранить каждый рисунок в массиве и удалить их все в ответ на событие встряхивания.

Это довольно просто - есть HomeViewController (UIViewController) и DoodleView (UIView), который занимает окно. HomeViewController имеет свойство doodleview, а в методе viewDidLoad создает экземпляр, присваивает его self.doodleview, а затем вызывает addSubview. Методы touchesBegan, touchesMoved и touchesEnded принадлежат классу doodleview. Прямо сейчас каждый щелчок и перетаскивание удаляет предыдущий.

Мой первоначальный шаг при их сохранении состоял в том, чтобы создать NSMutableArray "doodleViews" свойство HomeViewController, думая, что каждое событие touchesBegan создавало новый экземпляр doodleView, и просто вызывая addSubview для последнего элемента этого массива. Это не сработало, и я не знаю почему. Любые советы приветствуются.

Вот фрагмент из HomeViewController:

- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect window = [[UIScreen mainScreen] bounds];
    self.doodleView = [[DoodleView alloc] initWithFrame:window];

    CircleGestureRecognizer *recognizer = [[CircleGestureRecognizer alloc] initWithTarget:self action:@selector(handleCircleRecognizer:)]; 
    [self.doodleView addGestureRecognizer:recognizer];

    [self.view addSubview:self.doodleView];

}

Вот фрагмент из DoodleView:

- (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
{
    NSLog(@"touches began");

    path = [UIBezierPath bezierPath];   
    path.lineWidth = 15.0f;
    path.lineCapStyle = kCGLineCapRound;
    path.lineJoinStyle = kCGLineJoinRound;

    UITouch *touch = [touches anyObject];
    [path moveToPoint:[touch locationInView:self]];
}

- (void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event
{
    UITouch *touch = [touches anyObject];
    [path addLineToPoint:[touch locationInView:self]];
    [self setNeedsDisplay];
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    [path addLineToPoint:[touch locationInView:self]];
    [self setNeedsDisplay];
}

1 Ответ

0 голосов
/ 09 ноября 2011

Возможно, вы захотите сохранить UIBezierPath *path в NSMutableArray в методе touchesEnded. Затем в вашем коде рисования итерируйте массив и нарисуйте каждый путь.

Когда сотрясение просто из этого массива removeAllObjects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...