ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 3

Рисовалка

 

В этом уроке я покажу как создать простую и удобную рисовалку для iOS. Но прежде чем приступить к процессу программирования, рекомендую ознакомиться с уроком Обработка касаний. Кроме касаний нам понадобятся знания CoreGraphics, но эта тема будет раскрыта на сайте позже и в отдельном разделе. Теперь создадим  новый проект на основе шаблона Single View Application и назовем его DrawApp.

 

В интерфейс класса ViewController добавим две переменных:

 

<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController {
    CGPoint lastPoint;
}

@property (strong, nonatomic) IBOutlet UIImageView *drawImage;

@end</code>

 

В lastPoint мы будем хранить координаты последнего контакта с дисплеем, а в drawImage отображать то, что рисуем. Добавьте в файл интерфейса объект UIImageView (таким образом, чтобы он перекрывал весь UIView) и свяжите его с drawImage. Теперь напишем реализацю класса ViewController:

 

<code data-result="[object Object]">#import "ViewController.h"

@implementation ViewController

@synthesize drawImage;

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.drawImage = nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{	
    UITouch *touch = [touches anyObject];

    if (touch.tapCount == 1) {
        lastPoint = [touch locationInView:self.view];
    } else {
        drawImage.image = nil;
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{	
    UITouch *touch = [touches anyObject];	
    CGPoint currentPoint = [touch locationInView:self.view];

    UIGraphicsBeginImageContext(self.view.frame.size);
    CGRect drawRect = CGRectMake(0.0f, 0.0f, 
                                 self.view.frame.size.width, 
                                 self.view.frame.size.height);
    [drawImage.image drawInRect:drawRect];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0f);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0f, 0.0f, 0.0f, 1.0f);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;
}

@end</code>

 

В методе touchesBegan мы проверяем количество касаний (это нужно для того, чтобы двойным касанием стереть рисунок, а одинарным сохранить координаты в lastPoint). В методе touchesMoved мы получаем текущие координаты касания и рисуем красную линию между lastPoint и currentPoint (за счет того, что линии эти очень короткие, создается впечатление, что это просто точки). Цвет линии можно изменить, его мы получаем с метода CGContextSetRGBStrokeColor, подобно тому как получаем UIColor с помощью метода colorWithRed: green: blue: alpha:.

Comments are closed.