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

首頁 > 系統 > iOS > 正文

iOS開發中Quartz2D繪圖路徑的使用以及條紋效果的實現

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

繪圖路徑

A.簡單說明
在畫線的時候,方法的內部默認創建一個path。它把路徑都放到了path里面去。
1.創建路徑  cgmutablepathref 調用該方法相當于創建了一個路徑,這個路徑用來保存繪圖信息。
2.把繪圖信息添加到路徑里邊。
以前的方法是點的位置添加到ctx(圖形上下文信息)中,ctx 默認會在內部創建一個path用來保存繪圖信息。
在圖形上下文中有一塊存儲空間專門用來存儲繪圖信息,其實這塊空間就是CGMutablePathRef。
3.把路徑添加到上下文中。
代碼示例:
繪制一條直線的代碼:

復制代碼 代碼如下:

//1.獲取圖形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //2.繪圖(畫線)
    //設置起點
    CGContextMoveToPoint(ctx, 20, 20);
    //設置終點
    CGContextAddLineToPoint(ctx, 200, 300);
    //渲染
    CGContextStrokePath(ctx);

上面的代碼和下面的代碼是等價的。
復制代碼 代碼如下:

//1.獲取圖形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
   
    //2.繪圖
    //2.1創建一條直線繪圖的路徑
    //注意:但凡通過Quartz2D中帶有creat/copy/retain方法創建出來的值都必須要釋放
    CGMutablePathRef path=CGPathCreateMutable();
    //2.2把繪圖信息添加到路徑里
    CGPathMoveToPoint(path, NULL, 20, 20);
    CGPathAddLineToPoint(path, NULL, 200, 300);
    //2.3把路徑添加到上下文中
    //把繪制直線的繪圖信息保存到圖形上下文中
    CGContextAddPath(ctx, path);
   
    //3.渲染
    CGContextStrokePath(ctx);
   
    //4.釋放前面創建的兩條路徑
    //第一種方法
    CGPathRelease(path);
    //第二種方法
    //    CFRelease(path);
}

 
B.直接使用path的好處:
第一種代碼的閱讀性不好,不便于區分。使用path,則一個path就代表一條路徑。
比如:如果要在上下文中繪制多個圖形,這種情況下建議使用path。
代碼示例:
復制代碼 代碼如下:

- (void)drawRect:(CGRect)rect
{
    //1.獲取圖形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();

    //2.繪圖
    //2.a 畫一條直線
    //2.a.1創建一條繪圖的路徑
    //注意:但凡通過Quartz2D中帶有creat/copy/retain方法創建出來的值都必須要釋放
    CGMutablePathRef path=CGPathCreateMutable();
   
    //2.a.2把繪圖信息添加到路徑里
    CGPathMoveToPoint(path, NULL, 20, 20);
    CGPathAddLineToPoint(path, NULL, 200, 300);
   
    //2.a.3把路徑添加到上下文中
    //把繪制直線的繪圖信息保存到圖形上下文中
    CGContextAddPath(ctx, path);
   
   
    //2.b畫一個圓
    //2.b.1創建一條畫圓的繪圖路徑(注意這里是可變的,不是CGPathRef)
    CGMutablePathRef path1=CGPathCreateMutable();
   
    //2.b.2把圓的繪圖信息添加到路徑里
    CGPathAddEllipseInRect(path1, NULL, CGRectMake(50, 50, 100, 100));
   
    //2.b.3把圓的路徑添加到圖形上下文中
    CGContextAddPath(ctx, path1);
   
   
    //3.渲染
    CGContextStrokePath(ctx);
   
    //4.釋放前面創建的兩條路徑
    //第一種方法
    CGPathRelease(path);
    CGPathRelease(path1);
    //第二種方法
//    CFRelease(path);
}


效果:

2015113091913221.png (640×960)

提示:如果是畫線,那么就創建一條路徑(path)用來保存畫線的繪圖信息,如果又要重新畫一個圓,那么就可以創建一條新的路徑來專門保存畫圓的繪圖信息。
注意:
但凡通過quarzt2d中帶有creat/copy/retain方法創建出來的值都必須手動的釋放
有兩種方法可以釋放前面創建的路徑:
(1)CGPathRelease(path);
(2)CFRelease(path);
說明:CFRelease屬于更底層的cocafoundation框架
 
PS:補充知識點:
畫四邊形的一些方法:
第一種方式:通過連接固定的點繪制四邊形
第二種方式:指定起點和寬高繪制四邊形
第三種方式:把第二種方式中的兩步合并成一步。
第四種方式(oc的方法):繪制實心的四邊形,注意沒有空心的方法
第五種:畫根線,設置線條的寬度(通過這種方式可以畫斜的四邊形)
代碼示例:

復制代碼 代碼如下:

//
//  YYview.m
//  06-四邊形的五種畫法
//
//  Created by apple on 14-6-11.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYview.h"

@implementation YYview


- (void)drawRect:(CGRect)rect
{
    //獲取圖形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //第一種畫法,通過連接固定的點繪制四邊形
//    CGContextMoveToPoint(ctx, 0, 20);
//    CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>);
//    CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>);
//    CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>);
   
    //第二種方式:指定起點和寬高繪制四邊形
//    CGContextAddRect(ctx, CGRectMake(20, 20, 200, 100));
//    //渲染
//    CGContextStrokePath(ctx);
   
    //第三種方式:二種的兩步合并成一步。
    //畫空心的四邊形
//    CGContextStrokeRect(ctx, CGRectMake(20, 20, 200, 100));
//    //畫實心的四邊形
//    CGContextFillRect(ctx, CGRectMake(20, 20, 200, 100));
   
    //第四種方式(oc的方法):繪制實心的四邊形,注意沒有空心的方法
    UIRectFill(CGRectMake(20, 20, 200, 100));
   
    //第五種方式:畫根線,設置線條的寬度(通過這種方式可以畫斜的四邊形)
//    CGContextMoveToPoint(ctx, 20, 20);
//    CGContextAddLineToPoint(ctx, 100, 200);
//    CGContextSetLineWidth(ctx, 50);
//    //注意,線條只能畫成是空心的
//    CGContextStrokePath(ctx);
   
}
@end


第五種方法可以畫斜的四邊形。

2015113091941176.png (151×245)

信紙條紋
一、前導程序

新建一個項目,在主控制器文件中實現以下幾行代碼,就能輕松的完成圖片在視圖中的平鋪。

復制代碼 代碼如下:

#import "YYViewController.h"

@interface YYViewController ()

@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image=[UIImage imageNamed:@"me"];
    UIColor *color=[UIColor colorWithPatternImage:image];
    self.view.backgroundColor=color;
}

@end


效果:

2015113092000737.png (640×960)

二、實現信紙條紋的效果

利用上面的這種特性來做一個信紙的效果。
默認的view上沒有分割線,要在view上加上分割線有兩種方式:
(1)讓美工做一張專門用來做背景的圖片,把圖片設置為背景。缺點:信的長度不確定,所以背景圖片的長度也難以確定。
(2)通過一張小的圖片來創建一個顏色,平鋪實現背景效果。
 
第一步:生成一張以后用以平鋪的小圖片。
畫矩形。
畫線條。
第二步:從上下文中取出圖片設置為背景。黑乎乎一片?(其他地方時透明的,控制器的顏色,如果不設置那么默認為黑色的)
實現代碼:

復制代碼 代碼如下:

//
//  YYViewController.m
//  01-信紙條紋
//
//  Created by 孔醫己 on 14-6-11.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@end


復制代碼 代碼如下:

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

   
    // 1.生成一張以后用于平鋪的小圖片
    CGSize size = CGSizeMake(self.view.frame.size.width, 35);
    UIGraphicsBeginImageContextWithOptions(size , NO, 0);
   
    // 2.畫矩形
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGFloat height = 35;
    CGContextAddRect(ctx, CGRectMake(0, 0, self.view.frame.size.width, height));
    [[UIColor whiteColor] set];
    CGContextFillPath(ctx);
   
    // 3.畫線條
   
    CGFloat lineWidth = 2;
    CGFloat lineY = height - lineWidth;
    CGFloat lineX = 0;
    CGContextMoveToPoint(ctx, lineX, lineY);
    CGContextAddLineToPoint(ctx, 320, lineY);
    [[UIColor blackColor] set];
    CGContextStrokePath(ctx);
   
   
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIColor *color=[UIColor colorWithPatternImage:image];
    self.view.backgroundColor=color;
}

@end


效果:

2015113092017649.png (640×960)

三、應用場景

完成一個簡陋的電子書閱讀器

代碼:

復制代碼 代碼如下:

//
//  YYViewController.m
//  01-信紙條紋
//
//  Created by 孔醫己 on 14-6-11.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textview;
- (IBAction)perBtnClick:(UIButton *)sender;
- (IBAction)nextBtnClick:(UIButton *)sender;
@property(nonatomic,assign)int index;
@end


復制代碼 代碼如下:

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

   
    // 1.生成一張以后用于平鋪的小圖片
    CGSize size = CGSizeMake(self.view.frame.size.width, 26);
    UIGraphicsBeginImageContextWithOptions(size , NO, 0);
   
    // 2.畫矩形
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGFloat height = 26;
    CGContextAddRect(ctx, CGRectMake(0, 0, self.view.frame.size.width, height));
    [[UIColor brownColor] set];
    CGContextFillPath(ctx);
   
    // 3.畫線條
   
    CGFloat lineWidth = 2;
    CGFloat lineY = height - lineWidth;
    CGFloat lineX = 0;
    CGContextMoveToPoint(ctx, lineX, lineY);
    CGContextAddLineToPoint(ctx, 320, lineY);
    [[UIColor blackColor] set];
    CGContextStrokePath(ctx);
   
   
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIColor *color=[UIColor colorWithPatternImage:image];
    //self.view.backgroundColor=color;
    self.textview.backgroundColor=color;
}

- (IBAction)perBtnClick:(UIButton *)sender {
    self.index--;
    self.textview.text=[NSString stringWithFormat:@"第%d頁",self.index];
    CATransition *ca = [[CATransition alloc] init];
    ca.type = @"pageCurl";
   
    [self.textview.layer addAnimation:ca forKey:nil];
   
}

- (IBAction)nextBtnClick:(UIButton *)sender {
    self.index++;
    self.textview.text=[NSString stringWithFormat:@"第%d頁",self.index];
    CATransition *ca = [[CATransition alloc] init];
    ca.type = @"pageCurl";
   
    [self.textview.layer addAnimation:ca forKey:nil];
}
@end


storyboard中的界面布局

2015113092038030.png (492×350)

實現的簡單效果:

2015113092054392.png (640×1136)

2015113092110554.png (640×1136)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国av一区二区在线在线观看| 懂色aⅴ精品一区二区三区蜜月| 成人网页在线免费观看| 91视频国产精品| 国产午夜精品视频免费不卡69堂| 欧美国产乱视频| 在线日韩精品视频| 亚洲午夜精品久久久久久久久久久久| 日韩在线免费视频观看| 欧美激情视频网| 欧美激情a在线| 91久久久久久久久久久| 欧美日韩亚洲视频一区| 亚洲精品久久久久久久久久久久久| 日韩精品视频在线免费观看| 91成人免费观看网站| 国产婷婷97碰碰久久人人蜜臀| 精品久久久视频| 亚洲一区二区免费| 成人国产精品久久久久久亚洲| 亚洲综合中文字幕在线| 欧美高清视频在线播放| 日韩有码在线观看| 国产精品久久久久免费a∨| 国产一区二区日韩| 国产精品入口尤物| 久久免费高清视频| 日韩av最新在线观看| 日韩在线观看免费高清| 日韩电影中文字幕在线| 中文字幕日韩欧美精品在线观看| 日本欧美国产在线| 亚洲精品久久久久| 亚洲精品videossex少妇| 91在线视频导航| 97超级碰碰碰久久久| 有码中文亚洲精品| 国产精品高潮呻吟久久av野狼| 免费av一区二区| 91av成人在线| 日韩中文在线中文网三级| 国产精品国模在线| 亚洲人在线观看| 亚洲国产欧美在线成人app| 亚洲免费电影在线观看| 国产精品欧美日韩久久| 日韩欧美极品在线观看| 欧美精品www在线观看| 日韩欧美在线视频| 欧美在线视频网| 亚洲精品国精品久久99热| 欧美一区二区三区……| 成人福利网站在线观看11| 九九热最新视频//这里只有精品| 国内精品国产三级国产在线专| 欧美国产中文字幕| 欧美性xxxxxx| 欧美性高跟鞋xxxxhd| 国产精品久久电影观看| 亚洲欧美日韩精品久久奇米色影视| 亚洲美女福利视频网站| 国产精品露脸自拍| 久久天天躁狠狠躁老女人| 国产精品美女主播在线观看纯欲| 日韩视频在线免费| 欧美精品videosex性欧美| 久久久久日韩精品久久久男男| 午夜精品一区二区三区在线视频| 日韩在线观看免费高清完整版| 亚洲精品美女久久久| 91久久嫩草影院一区二区| 亚洲成人精品视频在线观看| 国产成人亚洲综合青青| 欧美激情视频在线观看| 最新国产成人av网站网址麻豆| 亚洲跨种族黑人xxx| 欧美一区二区大胆人体摄影专业网站| 欧美精品videos性欧美| 欧美日韩中文字幕日韩欧美| 欧美性20hd另类| 亚洲欧美日韩综合| 精品福利樱桃av导航| 亚洲乱码av中文一区二区| 亚洲国产精品成人一区二区| 精品国产区一区二区三区在线观看| 亚洲图片欧美日产| 日韩不卡在线观看| 亚洲偷欧美偷国内偷| 91成品人片a无限观看| 日韩欧美在线视频免费观看| 国产成人av网| 欧美性猛交xxxx乱大交极品| 欧洲成人免费视频| 亚洲免费视频在线观看| 青青在线视频一区二区三区| 国产精品久久色| 伊人久久男人天堂| 国产精品美女久久久久av超清| 日韩成人xxxx| 欧美激情视频三区| 成人黄色av播放免费| 中文精品99久久国产香蕉| 久久中文字幕在线| 亚洲第一网站男人都懂| 亚洲二区中文字幕| 18一19gay欧美视频网站| 久久资源免费视频| 久久久久在线观看| 久久久久99精品久久久久| 国产精品aaa| 国产精品久久久久久亚洲调教| 国产视频久久久久| 欧美日韩亚洲天堂| 欧美老妇交乱视频| 日韩美女主播视频| 国产欧美一区二区| 夜夜嗨av色一区二区不卡| 亚洲男女自偷自拍图片另类| 久久久精品在线观看| 夜夜嗨av色一区二区不卡| 日韩毛片在线看| 精品国产一区二区三区久久久狼| 中文字幕在线成人| 性色av一区二区三区免费| 国产精品精品一区二区三区午夜版| 91九色在线视频| 国产精品久久久久久中文字| 欧美性xxxxxx| 色噜噜国产精品视频一区二区| 国产欧美日韩精品在线观看| 国产91久久婷婷一区二区| 久久久免费精品视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美性黄网官网| 成人淫片在线看| 欧美日韩中文字幕综合视频| 国产欧美日韩专区发布| 久久久欧美一区二区| 日韩av网站导航| 姬川优奈aav一区二区| wwwwwwww亚洲| 欧美另类极品videosbestfree| 国产成人在线亚洲欧美| 538国产精品一区二区免费视频| 日韩va亚洲va欧洲va国产| 亚洲精品国产电影| 亚洲一区二区三区xxx视频| 久久99青青精品免费观看| 日韩乱码在线视频| 97婷婷涩涩精品一区| 国产不卡av在线免费观看| 成人免费福利在线| 亚洲欧美日韩网| 日韩美女在线播放| 91久久久久久久久久久| 国模叶桐国产精品一区| 久久久在线观看| 精品福利樱桃av导航| 国产精品6699| 欧美性猛xxx| 日韩色av导航| 亚洲一级黄色片| 日本乱人伦a精品| 91在线观看免费高清|