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

首頁 > 學院 > 開發設計 > 正文

iOS制作一個簡單的畫板

2019-11-14 18:05:17
字體:
來源:轉載
供稿:網友

制作簡單畫板

  作為iOS初學者,在學習完UI的幾個簡單控件(UILable,UITextField,UIButton)之后,就可以制作一個簡單的畫圖板demo,以下是具體制作流程(在MRC下),如有不足之處,還請各位大神們指教 0.0。

1.搭建界面,主要由UIButton,UITextField組成,底部的按鈕是UITextField的一個自定義鍵盤(inputView)


- (void)viewDidLoad {

    [super viewDidLoad];

    //創建菜單按鈕

    UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeSystem];

    menuButton.frame = CGRectMake(CGRectGetWidth(self.view.bounds) - 80, 40, 60, 40);

    [menuButton setTitle:@"菜單" forState:UIControlStateNormal];

    [menuButton addTarget:self action:@selector(handleMenuButtonAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:menuButton];

 

    //添加textField,但是不想讓他顯示出來,所以frame = CGRectZero

    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectZero];

    textField.tag = 123;

    [self.view addSubview:textField];

    [textField release];

 

    UIView *inputView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 60)];

    inputView.backgroundColor = [UIColor whiteColor];

    textField.inputView = inputView;

    [inputView release];

    

    NSArray *titles = @[@"減小",@"增大",@"撤銷",@"清空",@"顏色"];

    CGFloat width = (CGRectGetWidth(self.view.bounds) - 20 * 6) / 5;

    CGFloat height = width;

    CGFloat originY = (60 - height) / 2;

    CGFloat originX = 20;

    for (int i = 0 ; i < titles.count; i ++) {

        UIButton *button  =  [UIButton buttonWithType:UIButtonTypeSystem];

        button.tag = 100 + i;

        button.frame = CGRectMake(originX + (width + originX) * i , originY, width, height);

        

        [button setTitle:titles[i] forState:UIControlStateNormal];

        button.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0  blue:arc4random()%256/255.0  alpha:0.6]; 

        //將標題的顏色改成白色。

        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

        //設置按鈕的角半徑,為按鈕寬帶的一半

         button.layer.cornerRadius = width / 4.0;

        button.layer.masksToBounds = YES;//按指定的半徑裁減視圖。

        [button addTarget:self action:@selector(handleButtonAction:) forControlEvents:UIControlEventTouchUpInside];

        [inputView addSubview:button];

    }  

}

 // 以下是菜單按鈕的響應方法。

- (void)handleMenuButtonAction:(UIButton *)sender{

    //獲取textField

    UITextField *textField = (UITextField *)[self.view viewWithTag:123];

    

    //判斷如果textField當前是第一響應者,則撤銷其第一響應者權限,否則讓其成為第一響應者。

    if (textField.isFirstResponder) {

        [textField resignFirstResponder];

    }else{

        

        [textField becomeFirstResponder];//成為第一響應者。

    }

}

 

2.創建一個繼承NSObject的類LineModel,用于記錄線條。

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

//用于記錄線條的三元素(軌跡path 顏色color 寬度width)

@interface LineModel : NSObject

@PRoperty (nonatomic, retain) UIBezierPath *path;//使用貝塞爾曲線紀錄觸摸軌跡。

@property (nonatomic, retain) UIColor *color;//線條顏色

@property (nonatomic, assign) CGFloat width;//線條寬度 

@end

 

#import "LineModel.h"

 

@implementation LineModel

-(void)dealloc{

    [_color release];

    [_path release];

    [super dealloc];

}

@end

 

3.創建一個繼承UI View的子類PaintView,將上面的LineModel,具體實現畫圖板。

@interface PaintView : UIView

@property (nonatomic, retain) NSMutableArray *allLines;//用于保存畫板上的所有線條對象。

@property (nonatomic, retain) UIColor *lineColor;//當前的線條顏色。

@property (nonatomic, assign) CGFloat lineWidth;//當前線條的寬

- (void)undoLastDrawing;//撤銷上次繪制

- (void)allClean;//清空畫板。

@end

 

#import "PaintView.h"

#import "LineModel.h"

@implementation PaintView

-(void)dealloc{

    [_allLines release];

    [_lineColor release];

    [super dealloc];

}

-(NSMutableArray *)allLines{

    if (!_allLines) {

        self.allLines = [NSMutableArray array];

    }

    return _allLines;

}

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

    UITouch *aTouch = touches.anyObject;

    CGPoint startPoint = [aTouch locationInView:self.superview];

    //創建貝塞爾曲線對象,并設置曲線的起始點。

    UIBezierPath *bezierPath = [UIBezierPath bezierPath];

    //設置起始點。

    [bezierPath moveToPoint:startPoint];

    //創建線條模型對象,并保存當前線條的三個數據

    LineModel *line = [[[LineModel alloc]init]autorelease];

    line.path = bezierPath;

    line.color = self.lineColor;

    line.width = self.lineWidth;

    //添加到數組中等待使用

    [self.allLines addObject:line];

   }

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

    UITouch *aTouch = touches.anyObject;

    CGPoint cuttentPoint  = [aTouch locationInView:self.superview];

    //獲取對應的線條模型(在觸摸移動的過程中,數組的最后一個對象對應當前正在繪制的曲線)

    LineModel *aLine = self.allLines.lastObject;

    //在觸摸軌跡上添加點。

    [aLine.path addLineToPoint:cuttentPoint];

    [self setNeedsDisplay];//調用此方法是通知視圖,繪制界面,一旦調用此方法,系統就會自動調用drawRect:方法來繪制界面。

    }

- (void)drawRect:(CGRect)rect{

        for (LineModel *aLine  in  self.allLines) {

        //設置填充顏色

        [aLine.color setStroke];

        //設置繪制時的線條寬度

        [aLine.path setLineWidth:aLine.width];

        //開始繪制曲線

        [aLine.path stroke];

    }

}

- (void)undoLastDrawing{

    [self.allLines removeLastObject];

    [self setNeedsDisplay];//移除數組中的最后一條曲線對象,并重繪界面。

}

- (void)allClean{

    [self.allLines removeAllObjects];

    [self setNeedsDisplay];//清除所有曲線。

}

@end

4.將PaintView引入視圖控制器中,實現按鈕的方法調用。

   ///重寫loadView將PaintView作為視圖控制器的視圖

 

- (void)loadView{

 

    PaintView *paintView  = [[PaintView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];

 

    paintView.backgroundColor = [UIColor whiteColor];

 

    self.view = paintView;

 

    //設置默認的寬度和顏色。

 

    paintView.lineWidth = 10;

 

    paintView.lineColor = [UIColor blackColor];

 

    [paintView release];

 

}

 ////每個按鈕的實現方法。

 

 

- (void)handleButtonAction:(UIButton *)sender{

 

    PaintView *paintView = (PaintView *)self.view;

 

    switch (sender.tag) {

 

        case 100:

 

            if (paintView.lineWidth > 2) {

 

                paintView.lineWidth -= 1;

 

            }

 

            break;

 

        case 101:{

 

            paintView.lineWidth += 1;

 

            break;

 

        }

 

        case 102:{

 

            [paintView undoLastDrawing];

 

            break;

 

        }

 

        case 103:{

 

            [paintView allClean];

 

            break;

 

        }

 

        case 104:{

 

            sender.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0  blue:arc4random() % 256 / 255.0  alpha:1];

 

            //設置畫筆顏色

 

            paintView.lineColor = sender.backgroundColor;

 

            break;

 

        }        

 

        default:

 

            break;

 

    }    

 

}

 

 

   這樣一個簡單的涂鴉版就制作成了,里面肯定還有許多不足之處,小博第一次寫博,剛接觸經驗不足,還請各位給點建議,我會繼續改進。謝謝。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区高清在线观看| 亚洲精品成a人在线观看| 激情懂色av一区av二区av| 国产精品旅馆在线| 久久久国产成人精品| 亚洲成色777777在线观看影院| 国产91网红主播在线观看| 色99之美女主播在线视频| 日产精品久久久一区二区福利| 国产综合福利在线| 国产精品视频99| 国产日韩欧美一二三区| 91豆花精品一区| 国模私拍视频一区| 日韩精品在线影院| 日韩在线观看精品| 美女av一区二区三区| 奇米四色中文综合久久| 久久九九亚洲综合| 亚洲色图综合网| 亚洲成人av在线| 美女视频黄免费的亚洲男人天堂| 欧美激情三级免费| 亚洲精品成人久久久| 欧美午夜精品久久久久久久| www国产精品视频| 一个色综合导航| 91久久精品视频| 欧美国产视频一区二区| 国产精品久久久久久久久久三级| 国产精品久久久久999| 亚洲国产精品va在线观看黑人| 在线观看欧美视频| 北条麻妃一区二区在线观看| 色婷婷综合成人| 精品久久久久久久久久久| 久久久久久国产精品| 国产成人精品一区二区在线| 欧美成人在线免费视频| 一区二区三区日韩在线| 欧美大片欧美激情性色a∨久久| 中日韩美女免费视频网址在线观看| 色与欲影视天天看综合网| 国产精品福利在线观看网址| 69久久夜色精品国产69乱青草| 成人黄色大片在线免费观看| 一区二区三区视频免费| 2020久久国产精品| 国产精品免费观看在线| 日韩视频―中文字幕| 日韩视频第一页| 国产69精品久久久久久| 久久久久久亚洲精品中文字幕| 夜夜嗨av一区二区三区免费区| 日韩中文字幕视频在线观看| 欧美在线观看网址综合| 国产精品成人va在线观看| 欧美综合激情网| 欧美精品一区二区免费| 欧美成人亚洲成人日韩成人| 欧美日韩亚洲精品内裤| 国产一区二区美女视频| 97欧美精品一区二区三区| 精品久久久一区二区| 欧美在线观看日本一区| 精品偷拍各种wc美女嘘嘘| 一个人www欧美| 日韩欧美中文第一页| **欧美日韩vr在线| 美女国内精品自产拍在线播放| 欧美激情视频一区二区三区不卡| 午夜精品国产精品大乳美女| 亚洲国产精久久久久久久| 国产精品一区二区三| 97国产精品人人爽人人做| 欧美黄色片在线观看| 久久国产精品网站| 成人国产精品一区| 亚洲欧美成人精品| 国产日本欧美一区二区三区| 亚洲免费av网址| 久久精品男人天堂| 亚洲欧美日韩天堂| 欧美日韩在线观看视频小说| 亚洲999一在线观看www| 97在线视频免费看| 亚洲毛片在线观看| 久久久久久噜噜噜久久久精品| 九九综合九九综合| 97热在线精品视频在线观看| 色爱av美腿丝袜综合粉嫩av| 国内揄拍国内精品| 色琪琪综合男人的天堂aⅴ视频| 97热在线精品视频在线观看| 国产精品极品美女在线观看免费| 黄网站色欧美视频| 91国语精品自产拍在线观看性色| 国产最新精品视频| 亚洲黄色有码视频| 亚洲午夜性刺激影院| 黄色成人av网| 亚洲毛片在线观看.| 国产亚洲视频中文字幕视频| 91中文字幕在线观看| 亚洲免费av片| 欧美成人午夜免费视在线看片| 国产精品网站入口| 欧美专区在线播放| 97成人超碰免| 亚洲资源在线看| 亚洲在线免费观看| 91精品免费久久久久久久久| 欧美性猛交xxxx偷拍洗澡| 日韩精品中文字幕在线播放| 富二代精品短视频| 91久久精品国产91久久| 伊人亚洲福利一区二区三区| 国产激情综合五月久久| 欧美精品videos另类日本| 亚洲精品丝袜日韩| 国内精品久久久久久| 日韩国产欧美精品一区二区三区| 国产精品jvid在线观看蜜臀| 久久久综合免费视频| 一区二区亚洲精品国产| 日韩免费在线视频| 亚洲无线码在线一区观看| 日韩中文字幕第一页| 午夜精品一区二区三区在线播放| 国产欧美日韩综合精品| 91精品国产自产在线观看永久| 国产97在线亚洲| 亚洲欧美成人一区二区在线电影| 午夜精品久久17c| 国产精品日日摸夜夜添夜夜av| 中文字幕国产精品久久| 亚洲欧美国产高清va在线播| 91欧美日韩一区| 91免费精品国偷自产在线| 久久久久国产一区二区三区| 久久亚洲综合国产精品99麻豆精品福利| 欧美一级淫片丝袜脚交| 中文字幕亚洲第一| 久久精品久久精品亚洲人| 亚洲电影中文字幕| 日韩一区二区久久久| 日本精品一区二区三区在线| 日韩在线不卡视频| 日韩在线观看精品| 欧美成人免费va影院高清| 在线观看日韩视频| 日韩成人在线观看| 亚洲精品国产综合久久| 国产91精品久久久久久久| 日韩欧美在线免费| 91产国在线观看动作片喷水| 热久久这里只有精品| 亚洲久久久久久久久久久| 成人免费网站在线看| 欧美在线性视频| 在线成人一区二区| 亚洲视频在线观看| 91精品国产成人www| 国产日韩精品入口|