[转载]在uiview上画线.写字(转)

#import "WhiteBoardView.h"


@implementation WhiteBoardView


- (id)initWithFrame:(CGRect)frame {        //1
    if (self = [super initWithFrame:frame]) {        //2
       
        self.backgroundColor = [UIColor clearColor];        //3
        self.opaque=0.5;
       
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();   
        whiteBoardContext = CGBitmapContextCreate(NULL, self.frame.size.width, self.frame.size.height, 8,
                                                  4 *self.frame.size.width, colorSpace, kCGImageAlphaPremultipliedFirst);       
        CGColorSpaceRelease(colorSpace) ;       
       
        whiteBoardLayer = CGLayerCreateWithContext(whiteBoardContext, self.frame.size, NULL);       
        CGContextRef layerContext  = CGLayerGetContext(whiteBoardLayer);       
       
        CGContextSetLineWidth(layerContext, 20);       
        CGContextSetLineCap(layerContext, kCGLineCapRound);       
        CGContextSetRGBStrokeColor(layerContext, 0.0,0.0,0.0,1);   
       
        //UIImageView *imgView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.jpg"]];
//        imgView.frame=CGRectMake(150, 150, 150, 150);
//        [self insertSubview:imgView atIndex:0];
       
    }
    return self;   
}


- (void)drawRect:(CGRect)rect {       
    CGContextRef currentContext = UIGraphicsGetCurrentContext();   
   
    CGImageRef image = CGBitmapContextCreateImage(whiteBoardContext);       
    CGContextDrawImage(currentContext, [self bounds], image);       
    CGContextDrawLayerInRect(currentContext    , [self bounds], whiteBoardLayer);       

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{   
    UITouch *theTouch = [touches anyObject];                      
    if ([theTouch tapCount] == 2)
    {                                   
        CGContextClearRect(whiteBoardContext, [self bounds]);      
        [self setNeedsDisplay];                                       
    }else
    {                                                           
        [self touchesMoved:touches withEvent:event];               
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{   
    UITouch *theTouch = [touches anyObject];                       
    CGPoint currentTouchLocation = [theTouch locationInView:self];   
    CGPoint lastTouchLoacation = [theTouch previousLocationInView:self];   
    CGContextRef layerContext = CGLayerGetContext(whiteBoardLayer);           
    CGContextBeginPath(layerContext);                                       
    CGContextMoveToPoint(layerContext, lastTouchLoacation.x, lastTouchLoacation.y);       
    CGContextAddLineToPoint(layerContext, currentTouchLocation.x, currentTouchLocation.y);   
    CGContextStrokePath(layerContext);                                       
   
    [self setNeedsDisplay];                                                   
   
}

- (void)dealloc {
    CGContextRelease(whiteBoardContext);                                    //35
    CGLayerRelease(whiteBoardLayer);                                        //46
    [super dealloc];
}


@end

posted @ 2013-01-08 16:05  郑文亮  阅读(1625)  评论(0编辑  收藏  举报