最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年11月30日 09:23:02   投稿:goldensun  
這篇文章主要介紹了iOS開(kāi)發(fā)中Quartz2D繪圖路徑的使用以及條紋效果的實(shí)現(xiàn),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下

繪圖路徑

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

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

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

上面的代碼和下面的代碼是等價(jià)的。
復(fù)制代碼 代碼如下:

//1.獲取圖形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
   
    //2.繪圖
    //2.1創(chuàng)建一條直線繪圖的路徑
    //注意:但凡通過(guò)Quartz2D中帶有creat/copy/retain方法創(chuàng)建出來(lái)的值都必須要釋放
    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,則一個(gè)path就代表一條路徑。
比如:如果要在上下文中繪制多個(gè)圖形,這種情況下建議使用path。
代碼示例:
復(fù)制代碼 代碼如下:

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

    //2.繪圖
    //2.a 畫(huà)一條直線
    //2.a.1創(chuàng)建一條繪圖的路徑
    //注意:但凡通過(guò)Quartz2D中帶有creat/copy/retain方法創(chuàng)建出來(lái)的值都必須要釋放
    CGMutablePathRef path=CGPathCreateMutable();
   
    //2.a.2把繪圖信息添加到路徑里
    CGPathMoveToPoint(path, NULL, 20, 20);
    CGPathAddLineToPoint(path, NULL, 200, 300);
   
    //2.a.3把路徑添加到上下文中
    //把繪制直線的繪圖信息保存到圖形上下文中
    CGContextAddPath(ctx, path);
   
   
    //2.b畫(huà)一個(gè)圓
    //2.b.1創(chuàng)建一條畫(huà)圓的繪圖路徑(注意這里是可變的,不是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);
}


效果:

2015113091913221.png (640×960)

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

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

//
//  YYview.m
//  06-四邊形的五種畫(huà)法
//
//  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();
    //第一種畫(huà)法,通過(guò)連接固定的點(diǎn)繪制四邊形
//    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#>);
   
    //第二種方式:指定起點(diǎn)和寬高繪制四邊形
//    CGContextAddRect(ctx, CGRectMake(20, 20, 200, 100));
//    //渲染
//    CGContextStrokePath(ctx);
   
    //第三種方式:二種的兩步合并成一步。
    //畫(huà)空心的四邊形
//    CGContextStrokeRect(ctx, CGRectMake(20, 20, 200, 100));
//    //畫(huà)實(shí)心的四邊形
//    CGContextFillRect(ctx, CGRectMake(20, 20, 200, 100));
   
    //第四種方式(oc的方法):繪制實(shí)心的四邊形,注意沒(méi)有空心的方法
    UIRectFill(CGRectMake(20, 20, 200, 100));
   
    //第五種方式:畫(huà)根線,設(shè)置線條的寬度(通過(guò)這種方式可以畫(huà)斜的四邊形)
//    CGContextMoveToPoint(ctx, 20, 20);
//    CGContextAddLineToPoint(ctx, 100, 200);
//    CGContextSetLineWidth(ctx, 50);
//    //注意,線條只能畫(huà)成是空心的
//    CGContextStrokePath(ctx);
   
}
@end


第五種方法可以畫(huà)斜的四邊形。

2015113091941176.png (151×245)

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

新建一個(gè)項(xiàng)目,在主控制器文件中實(shí)現(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


效果:

2015113092000737.png (640×960)

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

利用上面的這種特性來(lái)做一個(gè)信紙的效果。
默認(rèn)的view上沒(méi)有分割線,要在view上加上分割線有兩種方式:
(1)讓美工做一張專門(mén)用來(lái)做背景的圖片,把圖片設(shè)置為背景。缺點(diǎn):信的長(zhǎng)度不確定,所以背景圖片的長(zhǎng)度也難以確定。
(2)通過(guò)一張小的圖片來(lái)創(chuàng)建一個(gè)顏色,平鋪實(shí)現(xiàn)背景效果。
 
第一步:生成一張以后用以平鋪的小圖片。
畫(huà)矩形。
畫(huà)線條。
第二步:從上下文中取出圖片設(shè)置為背景。黑乎乎一片?(其他地方時(shí)透明的,控制器的顏色,如果不設(shè)置那么默認(rèn)為黑色的)
實(shí)現(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.畫(huà)矩形
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGFloat height = 35;
    CGContextAddRect(ctx, CGRectMake(0, 0, self.view.frame.size.width, height));
    [[UIColor whiteColor] set];
    CGContextFillPath(ctx);
   
    // 3.畫(huà)線條
   
    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)

三、應(yīng)用場(chǎng)景

完成一個(gè)簡(jiǎn)陋的電子書(shū)閱讀器

代碼:

復(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.畫(huà)矩形
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGFloat height = 26;
    CGContextAddRect(ctx, CGRectMake(0, 0, self.view.frame.size.width, height));
    [[UIColor brownColor] set];
    CGContextFillPath(ctx);
   
    // 3.畫(huà)線條
   
    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頁(yè)",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頁(yè)",self.index];
    CATransition *ca = [[CATransition alloc] init];
    ca.type = @"pageCurl";
   
    [self.textview.layer addAnimation:ca forKey:nil];
}
@end


storyboard中的界面布局

2015113092038030.png (492×350)

實(shí)現(xiàn)的簡(jiǎn)單效果:

2015113092054392.png (640×1136)

2015113092110554.png (640×1136)

相關(guān)文章

  • iOS 內(nèi)存泄漏排查方法及原因分析

    iOS 內(nèi)存泄漏排查方法及原因分析

    本文主要介紹了iOS 內(nèi)存泄漏排查方法及原因,將從以下兩個(gè)層面解決iOS內(nèi)存泄漏問(wèn)題,內(nèi)存泄漏排查方法和內(nèi)存泄漏原因分析,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下
    2023-07-07
  • iOS開(kāi)發(fā)中使用UIWebView 屏蔽 alert警告框

    iOS開(kāi)發(fā)中使用UIWebView 屏蔽 alert警告框

    這篇文章主要介紹了iOS開(kāi)發(fā)中使用UIWebView 屏蔽 alert警告框的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問(wèn)題的解決方法

    Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問(wèn)題的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • IOS開(kāi)發(fā)之多線程N(yùn)SThiread GCD NSOperation Runloop

    IOS開(kāi)發(fā)之多線程N(yùn)SThiread GCD NSOperation Runloop

    這篇文章主要介紹了IOS多線程開(kāi)發(fā),主要用到NSThiread、GCD、 NSOperation、Runloop,有詳細(xì)的原理解析和實(shí)例代碼,對(duì)多線程感興趣的同學(xué),可以參考下
    2021-04-04
  • IOS 實(shí)現(xiàn)3D 浮動(dòng)效果動(dòng)畫(huà)

    IOS 實(shí)現(xiàn)3D 浮動(dòng)效果動(dòng)畫(huà)

    這篇文章主要介紹了IOS 實(shí)現(xiàn)3D 浮動(dòng)效果動(dòng)畫(huà)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS app中無(wú)網(wǎng)絡(luò)頁(yè)面的添加方法詳解

    iOS app中無(wú)網(wǎng)絡(luò)頁(yè)面的添加方法詳解

    這篇文章主要給大家介紹了關(guān)于iOS app中無(wú)網(wǎng)絡(luò)頁(yè)面的添加方法的相關(guān)資料,通過(guò)文中提供的方法可以很方便的給大家進(jìn)行提供一個(gè)提醒,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • iOS 開(kāi)發(fā)常用宏總結(jié)

    iOS 開(kāi)發(fā)常用宏總結(jié)

    這篇文章主要介紹了iOS 開(kāi)發(fā)常用宏總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS橫豎屏旋轉(zhuǎn)內(nèi)容總結(jié)

    iOS橫豎屏旋轉(zhuǎn)內(nèi)容總結(jié)

    本篇文章給大家總結(jié)了iOS橫豎屏旋轉(zhuǎn)的相關(guān)內(nèi)容以及實(shí)現(xiàn)的代碼分享,有需要的朋友參考下吧。
    2018-01-01
  • ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例

    ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例

    本篇文章主要介紹了ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-01-01
  • iOS runtime動(dòng)態(tài)添加方法示例詳解

    iOS runtime動(dòng)態(tài)添加方法示例詳解

    Runtime是想要做好iOS開(kāi)發(fā),或者說(shuō)是真正的深刻的掌握OC這門(mén)語(yǔ)言所必需理解的東西。下面這篇文章主要給大家介紹了關(guān)于iOS runtime動(dòng)態(tài)添加方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-01-01

最新評(píng)論

鄂尔多斯市| 诸暨市| 含山县| 阳谷县| 清河县| 华蓥市| 怀安县| 改则县| 温宿县| 邵东县| 阳高县| 林州市| 张家界市| 喀喇沁旗| 灯塔市| 青铜峡市| 专栏| 通州区| 南投市| 萨嘎县| 苍溪县| 灵宝市| 无锡市| 西吉县| 浦北县| 余干县| 万载县| 新晃| 安宁市| 绥阳县| 蕲春县| 张家口市| 卢氏县| 罗平县| 千阳县| 济南市| 浦城县| 邵阳县| 高安市| 万年县| 江都市|