国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - IOS - iOS開發中Quartz2D繪圖路徑的使用以及條紋效果的實現

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

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

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

繪圖路徑

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);
}


效果:

 

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

提示:如果是畫線,那么就創建一條路徑(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


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

 

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

 

信紙條紋
一、前導程序

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

復制代碼 代碼如下:


#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開發中Quartz2D繪圖路徑的使用以及條紋效果的實現

二、實現信紙條紋的效果

利用上面的這種特性來做一個信紙的效果。
默認的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


效果:

 

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

三、應用場景

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

代碼:

復制代碼 代碼如下:


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

 

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

實現的簡單效果:

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

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

延伸 · 閱讀

精彩推薦
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
主站蜘蛛池模板: 免费视频成人国产精品网站 | 亚洲综合大片69999 | 亚洲区欧美区 | 精品日韩一区二区 | 中文字幕 日韩有码 | 毛片黄视频| 久久亚洲一区 | 精品国产欧美 | 午夜av电影| 中文字幕视频播放 | 久久99精品久久久久久国产越南 | 成人av片在线观看 | 91社影院在线观看 | 国产区区 | 超碰在线人人草 | 久久久久久九九 | 午夜免费小视频 | 欧美一区二区三区啪啪 | 视频一区二区中文字幕 | 成人av电影在线观看 | 午夜在线 | 久久久久国产精品www | 国产精品久久久久久久久免费 | 亚洲免费看片 | 中文字幕高清在线播放 | 成人二区 | 欧美黄色一级片免费看 | 国产一区二区三区在线观看免费 | 激情总合网 | av一区在线 | 欧美大片一区二区 | 欧美在线99 | 亚洲欧美精选 | 亚洲天堂免费在线 | 久久久久这里只有精品 | 91久久久久久| 久草中文在线 | 综合婷婷 | 亚洲乱码国产乱码精品精的特点 | 欧美视频在线播放 | 日韩欧美在线视频 |