ios 畫圖 繪圖的實現(自由批註中檢視的subview的實現)bitmap Quartz 2D 快取點陣圖 自由批註功能的實現 如何實現在view上自由繪圖 提供原始碼

NO IMAGE

程式碼結構:

一。在檢視控制器(viewController)中實現繪圖檢視中控制元件的實現方法,比如;選擇顏色,選擇橡皮,選擇線條粗細等等,方法呼叫檢視控制器所繫結的view的方法,

二。在檢視中(view)加入觸控的起始點、終點、代理,線條粗細,顏色的成員並重寫

– (void)drawRect:(CGRect)rect

– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

– (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

方法中相關的方法委託代理進行實現。例如touchMoved的程式碼

SCStrokeImp* stroke2 = (SCStrokeImp*)strokeDelegate;//先對代理類的成員進行強制型別轉換,以便能識別其中的方法

     stroke2.flag =self.flag;                                                      //橡皮實現中的flag判斷是繪製還是擦除

    UITouch *touch = [touchesanyObject];                        

    lastTouch = [touchlocationInView:self];                        //獲取mov終點座標

    

    [strokeDelegatestrokeView:selfdrawLineFrom:firstTouchandTo:lastTouch];//把繪圖的實現扔給代理類進行實現

    firstTouch =lastTouch;                                                                //終點=起點,準備繪製下一條線段

    [selfsetNeedsDisplay];                                                          //對繪製的圖形進行展示

三。在代理類中實現的方法

-(CGContextRef)CreateBitmapContextwithWidth:(int)aWidth

                                  andHeight:(int)aHeight;      //建立一個快取點陣圖,實現對劃線的記憶

-(void)strokeView:(SCStrokeView*)aView (1)

     drawLineFrom:(CGPoint)aStart

            andTo:(CGPoint)aEnd;                       //檢視呼叫的劃線方法,含有被代理者本身作為引數,以便獲得被代理者當前的狀態

-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context;       //更新當前view

– (void) drawLineFrom:(CGPoint)aStart andTo:(CGPoint)aEnd;                             //1獲取到位置,線條寬度和顏色以後呼叫的實際劃線的方法

– (CGFloat)getStepWidth:(CGFloat)aBeginWidth                                         

            andEndWidth:(CGFloat)aEndWidth

            andDistance:(CGFloat)aDistance

          andStepLength:(CGFloat)aLength;

– (CGFloat)getDistanceFrom: (CGPoint)aStart

andTo: (CGPoint)aEnd;

– (NSMutableArray*)getPointSetWithFrom:(CGPoint)aStart

andTo:(CGPoint)aEnd;

– (CGFloat)getLineSlopeWithFrom:(CGPoint)aStart

  andTo:(CGPoint)aEnd;                                                                        //這四個函式負責對線條進行優化,消除鋸齒

四。在介面中宣告的方法(代理服從改介面)

-(void)strokeView:(SCStrokeView*)aView 

     drawLineFrom:(CGPoint)aStart

            andTo:(CGPoint)aEnd;

-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context;

//這兩個方法在view中被呼叫,所以想要成為view的代理,必須實現這兩個方法

關於自由批註的其他程式碼 參考我其他的帖子 需要原始碼請留言

程式碼地址

http://dl.dbank.com/c0gys4jhay