본문 바로가기
프로그래밍/iOS

터치가 발생했을때 뷰 위에 직접 그림을 그리기 위한 코드

by 백룡화검 2012. 1. 12.

MyUIView.h

#import <UIKit/UIKit.h>



@interface MyUIView : UIView {

    NSSet *touches;

}


@property(nonatomic, retain) NSSet *touches;


@end



#import "MyUIView.h"


MyUIView.m


@implementation MyUIView

@synthesize touches;


#pragma mark -

#pragma mark DrawFuction

-(void)drawRect:(CGRect)rect{

    CGContextRef context = UIGraphicsGetCurrentContext();  //그리기 작업을 위해 그래픽 컨텍스를 얻음

    CGFloat gray[4] = {0.5f, 0.5f, 0.5f, 1.0f};

    CGContextSetStrokeColor(context, gray);

    for(UITouch *touch in self.touches)

    {

        CGPoint pt = [touch locationInView:self];

        CGRect rc = CGRectMake(pt.x-20, pt.y-20, 40.0f, 40.0f);

        CGContextAddEllipseInRect(context, rc);  //실제 그림을 그리는 행위를 한다

    }

    CGContextStrokePath(context);

}


#pragma mark -

#pragma mark TouchEvent

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

    self.touches = [event allTouches];

    [self setNeedsDisplay];

}


-(BOOL)isMultipleTouchEnabled{

    return YES;

}


-(void)dealloc{

    [super dealloc];

    [touches release];

    touches = nil;

}


@end



  • 아이폰에서는 drawRect: 에서만 그리기를 할 수 있다.
  • 애플리케이션이 구현하는 그리기 작업은 그래픽 컨텍스트(context)를 얻는 것으로부터 시작된다.
  • 시스템은 그래픽 컨텍스트를 스택으로 관리한다.


경로 그리기 함수에는 다음과같은 것이 있다.
  • CGPathAddLineToPoint 와 CGContextAddLineToPoint
  • CGPathAddCurveToPoint 와 CGContextAddCurveToPoint
  • CGPathAddEllipseInRect 와 CGContextAddEllipseInRect
  • CGPathAddArc와 CGContextAddArc
  • CGPathAddRect와 CGContextAddRect


뷰 이외의 다른곳에서도 그리기를 할수 있는 방법
  • 비트맵 그래픽 컨텍스트와 PDF 그래픽 컨텍스트를 이용한다.
  • CGBitmapContextCreate와 CGPDFContextCreate 함수로 생성한다.
  • 이 함수로 그래픽컨텍스트를 생성한 후에 drawRect:가 아닌 다양한 위치에서 그리기를 수행할 수 있다.





출처 : http://gbsn.blog.me/130832879