iPhone Dev - приложение для рисования - PullRequest
0 голосов
/ 22 сентября 2011

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

Я пытаюсь сделать простое приложение «соединить точки». Мое приложение имеет функцию рисования от руки до касания, и я использую кнопки UIB для представления каждой точки.

Я подошел к этой проблеме, вызвав свойство center для 2 UIButtons (точек) и установив условия для рисования линии, только если начальные / конечные CGPoints являются центральными координатами для этих 2 точек. Это не работает!

Итак, мой вопрос:

Является ли UIButtons лучшим подходом для представления каждой точки? Если да, то какие функции следует добавить к каждой точке? Это кажется сильным кандидатом, поскольку вы можете вызвать свойство center и получить его координату центра. Но так как у меня возникли проблемы с этим, я подумал, что один пиксель, вероятно, недостаточно велик для размещения условий.

Если кнопки UIB не лучший подход для представления каждой точки, что является лучшей альтернативой?

Наконец, из-за этой проблемы я потратил много времени на изучение свойств и функциональности кнопок UIB. Я не могу найти хорошую ссылку на описания параметров отправленных событий, доступных через UIButton. Кто-нибудь знает хороший блог / справку?

Спасибо за вашу помощь заранее.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

Вместо того, чтобы фокусироваться на UIButtons и их событиях, я удалил UIButtons и сосредоточился на методах touchesBegan, touchesMoved и touchesEnd. Я включил CGContext методы для рисования линий, только когда UITouch зарегистрировано в определенном начальном местоположении и конкретном текущем местоположении. Хотя я не уверен, что это самый идеальный / эффективный ответ на мою проблему, он работает хорошо и позволил мне перейти к следующему этапу моего проекта. Если у кого-то есть предложения по улучшению этого решения, оно будет с благодарностью. Ниже приведен фрагмент кода, который я использовал для этого решения:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    if([touch tapCount] == 2) {
        image1_.image = nil;
        return;
    }

    initialPoint = [touch locationInView:self.view];

    //If initial touch to screen is within 15 pixels of Dot 1, set coordinates to Dot 1
    if(initialPoint.x > 36 && initialPoint.x < 66 && initialPoint.y > 161 && initialPoint.y < 191)
    {
        initialPoint.x = 51.0;
        initialPoint.y = 176.0;
    }

    //If initial touch to screen is within 15 pixels of Dot 2, set coordinates to Dot 2    
    if(initialPoint.x > 199.5 && initialPoint.x < 229.5 && initialPoint.y > 170.5 && initialPoint.y < 190.5)
    {
        initialPoint.x = 214.5;
        initialPoint.y = 175.5;
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    currentPoint = [touch locationInView:self.view];

    //If current touch to screen is within 15 pixels of Dot 2, and the initial touch is
    //set to Dot 1, draw line
    if(currentPoint.x > 199.5 && currentPoint.x < 229.5 && currentPoint.y > 170.5 && currentPoint.y < 190.5 && initialPoint.x == 51.0 && initialPoint.y == 176.0)
    {
        currentPoint.x = 214.5;
        currentPoint.y = 175.5;

        UIGraphicsBeginImageContext(self.view.frame.size);
        [image1_.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, 
                                             self.view.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapSquare);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 4.0);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),0.0, 0.0, 0.0, 1.0);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), initialPoint.x, initialPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(),currentPoint.x, currentPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        image1_.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        lineIsDrawn = YES;
    }    

    //If current touch to screen is within 15 pixels of Dot 3, and the initial touch is
    //set to Dot 2, and a line has already been drawn between Dot 1 & Dot 2, draw line    
    if(currentPoint.x > 155.5 && currentPoint.x < 180.5 && currentPoint.y > 0 && currentPoint.y < 28.5 && initialPoint.x == 214.5 && initialPoint.y == 175.5 && lineIsDrawn == YES)
    {
        currentPoint.x = 170.5;
        currentPoint.y = 13.5;
        UIGraphicsBeginImageContext(self.view.frame.size);
        [image1_.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, 
                                             self.view.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapSquare);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 4.0);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),0.0, 0.0, 0.0, 1.0);        
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), initialPoint.x, initialPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(),currentPoint.x, currentPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        image1_.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
0 голосов
/ 22 сентября 2011

Нажатие кнопки UIB не рекомендуется. Вот образец для рисования от руки на ощупь.

http://www.ifans.com/forums/showthread.php?t=132024

...