亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS App中圖片的線段涂鴉功能的添加方法

2020-07-26 03:24:25
字體:
來源:轉載
供稿:網友

接下來我們要講圖片的涂鴉,我們分開一點一點拓展,先給圖片上劃線
創建項目 起名testAddLine

201633092150487.png (730×518)

201633092222470.png (730×518)

接下來我們在默認生成的ViewController中添加一張圖片 待用
同時添加一個按鈕

復制代碼 代碼如下:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
     
    UIImageView *imageV = [[UIImageView alloc]initWithFrame:CGRectMake(10, 120, screen_Width-20, screen_Height-150)]; 
    imageV.image = [UIImage imageNamed:@"640-960-1.jpg"]; 
    [self.view addSubview:imageV]; 
     
    UIButton *testBtn = [[UIButton alloc]initWithFrame:CGRectMake(screen_Width/2.0-60, 60, 120, 36)]; 
    [testBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [testBtn setTitle:@"添加直線" forState:UIControlStateNormal]; 
    [testBtn addTarget:self action:@selector(addLineAct:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:testBtn]; 

 
- (void)addLineAct:(id)sender{ 
    NSLog(@"測試按鈕"); 


接下來我們創建一個UIView 用來添加直線 起名:DrawLine

201633092246372.png (730×518)

201633092304425.png (730×518)

創建幾個變量

復制代碼 代碼如下:

@property(nonatomic,strong) NSMutableArray * completeLines; //已經畫好的線條 存入數組 
@property(nonatomic,strong) NSMutableDictionary* LinesInProscess; //正在畫的線條 存入字典 
@property(nonatomic,strong) UIColor *lineColor;//線條顏色 
@property (nonatomic)float lineWidth;//線條的粗細 

初始化DrawLine
復制代碼 代碼如下:

//初始化 
- (id)initWithFrame:(CGRect)frame{ 
    if (self = [super initWithFrame:frame]) { 
        //初始化變量 
        _completeLines = [[NSMutableArray alloc]init]; 
        _LinesInProscess = [[NSMutableDictionary alloc]init]; 
        //設置透明背景 
        self.backgroundColor = [UIColor clearColor]; 
         
    } 
     
    return  self; 


我們把線條單獨抽象出來 創建一個類 創建對象 起名 Line

201633092342893.png (730×518)

201633092404783.png (730×518)

線條 兩個屬性 起始點 結束點(這就是數學中的兩點確定一條直線)
給Line 類創建兩個屬性

復制代碼 代碼如下:

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 
 
@interface Line : NSObject 
 
@property(nonatomic)CGPoint begin; //線條開始點 
 
@property(nonatomic)CGPoint end; //線條結束點 
 
@end 

接下來 我們重寫DrawLine 的  drawRect 方法  繪制線條
復制代碼 代碼如下:

// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    // Drawing code 
     
    //獲取上下文 
    CGContextRef cgt=UIGraphicsGetCurrentContext(); 
    //設置線條寬度 
    CGContextSetLineWidth(cgt, self.lineWidth); 
    //設置線條兩端形狀為圓角 
    CGContextSetLineCap(cgt, kCGLineCapRound); 
     
    //設置顏色 
    [self.lineColor set]; 
    //繪制已經完成的線段 
    for (Line *line in _completeLines){ 
        CGContextMoveToPoint(cgt, [line begin].x, [line begin].y); 
        CGContextAddLineToPoint(cgt, [line end].x, [line end].y ); 
        CGContextStrokePath(cgt); 
    } 
     
     
    //繪制正在畫的線段 
    for (NSArray *v in _LinesInProscess) { 
        Line *line =[_LinesInProscess objectForKey:v]; 
        CGContextMoveToPoint(cgt, [line begin].x, [line begin].y); 
        CGContextAddLineToPoint(cgt, [line end].x, [line end].y ); 
        CGContextStrokePath(cgt); 
    } 
     


實現幾個手指滑動方法 用來接受手指的位置畫線
復制代碼 代碼如下:

//清空畫板 
-(void)clearAll 

    [_completeLines removeLastObject]; 
    [_LinesInProscess removeAllObjects]; 
    [self setNeedsDisplay]; 

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

    //判斷是否連按 
    for (UITouch *t in touches) { 
        if ([t tapCount]>1) { 
            //第二次畫線時第一條線還未完成時結束畫線 
            [self clearAll]; 
            return; 
        } 
         
        //NSValue 作為鍵使用 
        NSValue *key=[NSValue valueWithNonretainedObject:t]; 
         
        // 根據觸摸位置創建Line對象 
        CGPoint loc=[t locationInView:self]; 
        Line *newLine=[[Line alloc]init ]; 
        newLine.begin=loc; 
        newLine.end=loc; 
        //將當前正在畫的線存入字典 
        [_LinesInProscess setObject:newLine forKey:key]; 
         
    } 

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

    //手指移動過程中按照當前手指的位置動態更新線條 
    for (UITouch * t in touches) { 
        NSValue *key=[NSValue valueWithNonretainedObject:t]; 
        // 找對象當前UITouch對象的Line對象 
        Line *line =[_LinesInProscess objectForKey:key]; 
         
        CGPoint loc=[t locationInView:self]; 
        line.end=loc; 
    } 
    [self setNeedsDisplay]; 

 
-(void)endTouches:(NSSet *) touches 

    //畫線完成之后將當前線條加入_completeLines 數組中 同時刪除字典_LinesInProscess里的線條 
    for (UITouch *t in touches) { 
        NSValue *key=[NSValue valueWithNonretainedObject:t]; 
        Line *line =[_LinesInProscess objectForKey:key]; 
        if (line) { 
            [_completeLines addObject:line]; 
            [_LinesInProscess removeObjectForKey:key]; 
        } 
    } 
    [self setNeedsDisplay]; 

 
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 

    [self endTouches:touches]; 

 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

    [self endTouches:touches]; 

回到 ViewController中 給按鈕點擊事件中 添加DrawLine到ImageView上

復制代碼 代碼如下:

- (void)addLineAct:(id)sender{ 
    NSLog(@"測試按鈕"); 
     
    DrawLine *touchdrawView = [[DrawLine alloc]initWithFrame:imageV.frame]; 
 
    touchdrawView.lineColor = [UIColor yellowColor]; 
    touchdrawView.lineWidth = 5.0; 
    touchdrawView.tag = 902; 
    [self.view addSubview:touchdrawView]; 
     
     


好了 運行程序試試
點擊 添加直線 按鈕之后 試試在圖片上畫線

201633092437200.jpg (640×1136)

帶剪頭的線條
在上面例子的基礎上稍微拓展一下,給線段末尾加上一個箭頭
給DrawLine 類中添的方法 drawRect 中添加一段代碼

201633092553144.jpg (675×244)

復制代碼 代碼如下:

//添加剪頭 
double r = sqrt((line.end.x-line.begin.x)*(line.end.x-line.begin.x)+(line.begin.y-line.end.y)*(line.begin.y-line.end.y));//線條長度 
CGContextMoveToPoint(cgt,line.end.x,line.end.y); 
//P1 
CGContextAddLineToPoint(cgt,line.end.x-(10*(line.begin.y-line.end.y)/r),line.end.y-(10*(line.end.x-line.begin.x)/r)); 
//P3 
CGContextAddLineToPoint(cgt,line.end.x+(20*(line.end.x-line.begin.x)/r), line.end.y-(20*(line.begin.y-line.end.y)/r)); 
//P2 
CGContextAddLineToPoint(cgt,line.end.x+(10*(line.begin.y-line.end.y)/r),line.end.y+(10*(line.end.x-line.begin.x)/r)); 
 
CGContextAddLineToPoint(cgt, line.end.x,line.end.y); 
CGContextDrawPath(cgt,kCGPathFillStroke); 
CGContextStrokePath(cgt); 

以上方法的思路 就是在線段畫完之后 確定三個點 畫一個三角形作為箭頭形狀

201633092502978.jpg (556×506)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品免费观看| 伊人男人综合视频网| 亚洲精品99久久久久中文字幕| 欧美日韩国产成人高清视频| 国产福利精品av综合导导航| 91久久精品美女高潮| 久久综合久中文字幕青草| 国内精品美女av在线播放| 国产精品一区二区三区在线播放| 一区二区欧美在线| 日本最新高清不卡中文字幕| 亚洲一区二区三区乱码aⅴ| 最近2019年手机中文字幕| 国产精品美女www| 曰本色欧美视频在线| 亚洲天堂av综合网| 久久琪琪电影院| 国产99在线|中文| 午夜精品久久久久久99热| 亚洲精品日韩欧美| 欧美成人亚洲成人日韩成人| 国产婷婷色综合av蜜臀av| 日韩精品视频在线免费观看| 成人h猎奇视频网站| 久久综合色影院| 自拍偷拍免费精品| 国产精品九九久久久久久久| 欧美视频精品一区| 欧美激情伊人电影| 亚洲一区二区三区乱码aⅴ| 亚洲成人黄色网址| 人人做人人澡人人爽欧美| 97久久超碰福利国产精品…| 国产丝袜视频一区| 日韩欧美在线免费| 久久久99免费视频| 狠狠躁天天躁日日躁欧美| 国产免费一区二区三区在线观看| 欧美成人午夜剧场免费观看| 欧美最猛性xxxxx(亚洲精品)| 精品国内亚洲在观看18黄| 亚洲精品自拍视频| 欧美多人乱p欧美4p久久| 欧美日韩午夜视频在线观看| 日韩中文字幕亚洲| 一区国产精品视频| 57pao成人永久免费视频| 5252色成人免费视频| 久久精品91久久久久久再现| 国产精品综合不卡av| 精品亚洲夜色av98在线观看| 久久中文字幕一区| 中文字幕在线日韩| 亚洲自拍偷拍福利| 国产亚洲美女精品久久久| 欧洲永久精品大片ww免费漫画| 亚洲国产精品久久久久| 精品欧美国产一区二区三区| 91香蕉亚洲精品| 疯狂蹂躏欧美一区二区精品| 久久久精品中文字幕| 日韩中文在线中文网三级| 国产精品视频永久免费播放| 国产一区二区精品丝袜| 亚洲最大福利网| 色妞在线综合亚洲欧美| 日韩av免费在线播放| 国产在线视频欧美| 欧美激情2020午夜免费观看| 这里只有精品在线观看| 国产欧美日韩免费| 久久久久久成人精品| 成人免费高清完整版在线观看| 国产精品成人免费电影| 7m第一福利500精品视频| 欧美一级电影在线| 色偷偷91综合久久噜噜| 一区国产精品视频| 亚洲精品白浆高清久久久久久| 91精品国产综合久久香蕉的用户体验| 欧洲中文字幕国产精品| 中日韩美女免费视频网站在线观看| 国产一区二区三区直播精品电影| 欧美最猛性xxxxx亚洲精品| 国产婷婷成人久久av免费高清| 国产精品成人aaaaa网站| 午夜精品久久久久久久男人的天堂| 狠狠躁18三区二区一区| 精品福利视频导航| 自拍偷拍亚洲欧美| 最近更新的2019中文字幕| 国产日韩欧美在线视频观看| 国产精品三级美女白浆呻吟| 欧美国产日韩中文字幕在线| 中文字幕精品av| 精品久久久久久久久久久久| 亚洲偷熟乱区亚洲香蕉av| 亚洲va码欧洲m码| 国产一区av在线| 亚洲国产精品资源| 亚洲 日韩 国产第一| 欧美午夜精品久久久久久人妖| 日韩一区二区精品视频| 欧美性猛交xxxx富婆弯腰| 2024亚洲男人天堂| 欧美久久精品一级黑人c片| 日韩免费黄色av| 成人黄色免费网站在线观看| 欧美国产精品人人做人人爱| 精品毛片三在线观看| 亚洲精品视频网上网址在线观看| 欧美成人午夜激情在线| 热re91久久精品国99热蜜臀| 亚洲欧洲成视频免费观看| 国产a∨精品一区二区三区不卡| 国产精品久久久久久久电影| 欧美午夜精品久久久久久久| 伊人伊成久久人综合网小说| 亚洲精品国产成人| 欧美极品少妇与黑人| 日韩亚洲国产中文字幕| 亚洲黄色www网站| 欧美插天视频在线播放| 国产精品99一区| 中文字幕亚洲欧美日韩在线不卡| 精品国产一区二区三区久久久| 久久亚洲精品中文字幕冲田杏梨| 国产成人精品视| 亚洲国产中文字幕在线观看| 国内精品久久久久久久久| 日韩欧美一区二区在线| 亚洲美腿欧美激情另类| 国产在线一区二区三区| 国产一区二区三区中文| 97精品国产97久久久久久免费| 欧美高清视频在线观看| 亚洲片国产一区一级在线观看| 日韩av网址在线观看| 久久久久久久999精品视频| 91av网站在线播放| 一本一本久久a久久精品牛牛影视| 欧美性生活大片免费观看网址| 成人久久久久久| 亚洲成人教育av| 欧美成人精品在线观看| 国模视频一区二区三区| 91久久久久久国产精品| 91人成网站www| 尤物精品国产第一福利三区| 亚洲精品久久在线| 中文字幕亚洲欧美日韩2019| 成人精品视频99在线观看免费| 久久99精品视频一区97| 91在线高清视频| 国内久久久精品| 亚洲美女视频网站| 欧美国产日韩一区二区三区| 久热爱精品视频线路一| 亚洲人成网站色ww在线| 日本久久久久久久| 91高清视频免费| 91精品国产高清自在线| 国产精品自产拍在线观看| 欧美大片免费观看在线观看网站推荐|