麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統(tǒng) > iOS > 正文

iOS坐標系的深入探究

2019-10-21 18:39:22
字體:
供稿:網(wǎng)友

前言

app在渲染視圖時,需要在坐標系中指定繪制區(qū)域。

這個概念看似乎簡單,事實并非如此。

When an app draws something in iOS, it has to locate the drawn content in a two-dimensional space defined by a coordinate system.
This notion might seem straightforward at first glance, but it isn't.

正文

我們先從一段最簡單的代碼入手,在drawRect中顯示一個普通的UILabel;

為了方便判斷,我把整個view的背景設置成黑色:

- (void)drawRect:(CGRect)rect { [super drawRect:rect]; CGContextRef context = UIGraphicsGetCurrentContext(); NSLog(@"CGContext default CTM matrix %@", NSStringFromCGAffineTransform(CGContextGetCTM(context))); UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 28)]; testLabel.text = @"測試文本"; testLabel.font = [UIFont systemFontOfSize:14]; testLabel.textColor = [UIColor whiteColor]; [testLabel.layer renderInContext:context];}

這段代碼首先創(chuàng)建一個UILabel,然后設置文本,顯示到屏幕上,沒有修改坐標。

所以按照UILabel.layer默認的坐標(0, 0),在左上角進行了繪制。

iOS,坐標系

UILabel繪制

接著,我們嘗試使用CoreText來渲染一段文本。

- (void)drawRect:(CGRect)rect { [super drawRect:rect]; CGContextRef context = UIGraphicsGetCurrentContext(); NSLog(@"CGContext default matrix %@", NSStringFromCGAffineTransform(CGContextGetCTM(context))); NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"測試文本" attributes:@{             NSForegroundColorAttributeName:[UIColor whiteColor],             NSFontAttributeName:[UIFont systemFontOfSize:14],             }]; CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) attrStr); // 根據(jù)富文本創(chuàng)建排版類CTFramesetterRef UIBezierPath * bezierPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 100, 20)]; CTFrameRef frameRef = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), bezierPath.CGPath, NULL); // 創(chuàng)建排版數(shù)據(jù) CTFrameDraw(frameRef, context);}

首先用NSString創(chuàng)建一個富文本,然后根據(jù)富文本創(chuàng)建CTFramesetterRef,結(jié)合CGRect生成的UIBezierPath,我們得到CTFrameRef,最終渲染到屏幕上。

但是結(jié)果與上文不一致:文字是上下顛倒。

iOS,坐標系
CoreText的文本繪制

從這個不同的現(xiàn)象開始,我們來理解iOS的坐標系。

坐標系概念

在iOS中繪制圖形必須在一個二維的坐標系中進行,但在iOS系統(tǒng)中存在多個坐標系,常需要處理一些坐標系的轉(zhuǎn)換。
先介紹一個圖形上下文(graphics context)的概念,比如說我們常用的CGContext就是Quartz 2D的上下文。圖形上下文包含繪制所需的信息,比如顏色、線寬、字體等。用我們在Windows常用的畫圖來參考,當我們使用畫筆
注:相關教程知識閱讀請移步到IOS開發(fā)頻道。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲精久久 | 国产视频在线免费观看 | 日本成人高清视频 | 欧美黄色一级生活片 | 国产免费一区二区三区最新不卡 | 成人小视频免费在线观看 | 欧美日韩高清在线观看 | 一区二区精品视频在线观看 | 伦一区二区三区中文字幕v亚洲 | 男女羞羞视频在线免费观看 | 精品一区二区中文字幕 | 黄在线看 | 精品久久久久久久久亚洲 | 精国品产一区二区三区有限公司 | 一级片九九 | 久久恋| 99ri在线| 黄色片网站在线免费观看 | va视频在线| 免费网站看v片在线a | 成人免费福利视频 | 久久激情国产 | 国产精品久久久久久久娇妻 | 亚洲成人在线视频网站 | 久久蜜桃精品一区二区三区综合网 | 99成人精品视频 | 久久国产一级 | 国产妞干网 | 亚洲成人第一页 | 免费看性xxx高清视频自由 | 国产98色在线 | 亚洲男人的天堂在线视频 | 欧美性猛交一区二区三区精品 | 久久精品视频69 | 91超视频 | 中文字幕涩涩久久乱小说 | 欧美中文字幕一区二区三区亚洲 | 免费国产一级特黄久久 | 91麻豆精品国产91久久久无需广告 | 国产精品久久久久久久午夜片 | 免费一级片网站 |