激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - IOS - iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

2020-12-30 13:31文頂頂 IOS

這篇文章主要介紹了iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下

繪圖路徑

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

復(fù)制代碼 代碼如下:

//1.獲取圖形上下文
    cgcontextref ctx=uigraphicsgetcurrentcontext();
    //2.繪圖(畫線)
    //設(shè)置起點
    cgcontextmovetopoint(ctx, 20, 20);
    //設(shè)置終點
    cgcontextaddlinetopoint(ctx, 200, 300);
    //渲染
    cgcontextstrokepath(ctx);


上面的代碼和下面的代碼是等價的。

復(fù)制代碼 代碼如下:

//1.獲取圖形上下文
    cgcontextref ctx=uigraphicsgetcurrentcontext();
   
    //2.繪圖
    //2.1創(chuàng)建一條直線繪圖的路徑
    //注意:但凡通過quartz2d中帶有creat/copy/retain方法創(chuàng)建出來的值都必須要釋放
    cgmutablepathref path=cgpathcreatemutable();
    //2.2把繪圖信息添加到路徑里
    cgpathmovetopoint(path, null, 20, 20);
    cgpathaddlinetopoint(path, null, 200, 300);
    //2.3把路徑添加到上下文中
    //把繪制直線的繪圖信息保存到圖形上下文中
    cgcontextaddpath(ctx, path);
   
    //3.渲染
    cgcontextstrokepath(ctx);
   
    //4.釋放前面創(chuàng)建的兩條路徑
    //第一種方法
    cgpathrelease(path);
    //第二種方法
    //    cfrelease(path);
}


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

復(fù)制代碼 代碼如下:


- (void)drawrect:(cgrect)rect
{
    //1.獲取圖形上下文
    cgcontextref ctx=uigraphicsgetcurrentcontext();

 

    //2.繪圖
    //2.a 畫一條直線
    //2.a.1創(chuàng)建一條繪圖的路徑
    //注意:但凡通過quartz2d中帶有creat/copy/retain方法創(chuàng)建出來的值都必須要釋放
    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創(chuàng)建一條畫圓的繪圖路徑(注意這里是可變的,不是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.釋放前面創(chuàng)建的兩條路徑
    //第一種方法
    cgpathrelease(path);
    cgpathrelease(path1);
    //第二種方法
//    cfrelease(path);
}


效果:

 

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

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

復(fù)制代碼 代碼如下:


//
//  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));
   
    //第五種方式:畫根線,設(shè)置線條的寬度(通過這種方式可以畫斜的四邊形)
//    cgcontextmovetopoint(ctx, 20, 20);
//    cgcontextaddlinetopoint(ctx, 100, 200);
//    cgcontextsetlinewidth(ctx, 50);
//    //注意,線條只能畫成是空心的
//    cgcontextstrokepath(ctx);
   
}
@end


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

 

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

 

信紙條紋
一、前導(dǎo)程序

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

復(fù)制代碼 代碼如下:


#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


效果:

 

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

二、實現(xiàn)信紙條紋的效果

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

復(fù)制代碼 代碼如下:


//
//  yyviewcontroller.m
//  01-信紙條紋
//
//  created by 孔醫(yī)己 on 14-6-11.
//  copyright (c) 2014年 itcast. all rights reserved.
//

 

#import "yyviewcontroller.h"

@interface yyviewcontroller ()

@end

 

復(fù)制代碼 代碼如下:


@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


效果:

 

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

三、應(yīng)用場景

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

代碼:

復(fù)制代碼 代碼如下:


//
//  yyviewcontroller.m
//  01-信紙條紋
//
//  created by 孔醫(yī)己 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

 

復(fù)制代碼 代碼如下:


@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中的界面布局

 

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

實現(xiàn)的簡單效果:

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

iOS開發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實現(xiàn)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 曰批全过程40分钟免费视频多人 | 九九精品免费 | 日本特级a一片免费观看 | 欧美成人免费一级 | 美女扒开胸罩给男生看视频 | 日韩欧美高清片 | 亚洲欧美一区二区三区在线观看 | 久久国产综合视频 | 97se亚洲综合在线韩国专区福利 | 国产精品成人久久 | 九九精品在线观看视频 | 国产一级一区二区三区 | 亚洲一区国产一区 | 久色免费视频 | 国产精品午夜小视频观看 | 国产午夜精品久久久久 | 55夜色66夜色国产精品视频 | 中日韩乱码一二新区 | 黄色免费视频观看 | xnxx 日本19 | 欧美成人鲁丝片在线观看 | 精品成人一区二区三区 | 久久精品国产99国产精品澳门 | 色播av在线 | 奇米影视在线 | 欧美中文字幕一区二区三区亚洲 | 免费黄色一级网站 | av成人免费 | 毛片在线视频免费观看 | 亚洲综合网站 | 久久精品日韩 | 一本大道av | 一区二区三级视频 | h视频在线免费观看 | 一级做a在线观看 | omofun 动漫在线观看 | 久久精品久久精品国产大片 | 亚洲成年人免费网站 | 91色琪琪电影亚洲精品久久 | 国产精品久久久久久久娇妻 | 一区二区三区欧美在线观看 |