• [转载]在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

  • 相关阅读:
    POJ 3070 Fibonacci【矩阵连乘】
    hdu 3038 How Many Answers Are Wrong【并查集的简单应用】
    POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
    POJ 1984 Navigation Nightmare【并查集思路总结】
    POJ 2492 A Bug's Life【并查集的简单应用同类的判断】
    POJ 1703 Find them, Catch them【典型并查集:判断在不同的集合】
    POJ 1456 Supermarket【贪心 + 并查集】
    ZOJ 3261 Connections in Galaxy War【并查集】
    POJ 1984 Navigation Nightmare
    POJ 1988 Cube Stacking【并查集的简单应用 堆木块】
  • 原文地址:https://www.cnblogs.com/zhwl/p/2851301.html
Copyright © 2020-2023  润新知