UIKit是高級別的圖形接口,它的API都是基于Objective-C的。它能夠訪問繪圖、動畫、字體、圖片等內容。
繪制視圖
1.視圖繪制周期
drawRect
setNeedsDisplay
setNeedsDisplayInRect
觸發視圖重新繪制的動作有如下幾種
- 當遮擋你的視圖的其他視圖被移動或刪除操作的時候
- 將視圖的hidden屬性聲明設置為No,使其從隱藏狀態變為可見
- 將視圖滾出屏幕,然后再重新回到屏幕上
- 顯式調用視圖的setNeedsDisplay或者setNeedsDisplayInRect:方法
2.填充矩形
//為當前的圖形上下文設置要填充的顏色
[[UIColor redColor] setFill];
//填充矩形函數-按照方才設置的顏色進行填充矩形
UIRectFill(rect);
3.填充與描邊
UIKit提供非常基本的繪圖功能,主要的API有
- UIRectFill(CGRect rect),填充矩形函數
- UIRectFrame(CGRect rect),矩形描邊函數
- UIBezierPath,繪制常見路徑類,包括線段、弧線、矩形、圓角矩形和橢圓的方法。
UIKit雖然提供了UIBezierPath等類,但是對于線段、漸變,陰影,反鋸齒等高級特性支持還是不及Quartz 2D
//設置描邊顏色
[[UIColor blackColor] setStroke];
CGRect frame = CGRectMake(20, 30, 100, 300);
//矩形描邊函數
UIRectFrame(frame);
4.繪制圖像和文本
/*UIImage類中繪制圖像主要的方法*/
//-drawAtPoint:(CGPoint)point 設置繪制定點
//-drawInRect:(CGRect)rect 圖片繪制在指定的矩形里
//-drawAsPatternInRect:(CGRect)rect 在指定的矩形里平鋪繪制圖片,如果圖片大小超出了指定的矩形,形式上與-drawAtPoint:方法類似,如果圖片大小小于指定的矩形,就會有平鋪的效果
- (void)drawImage
{
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"photo" ofType:@"jpg"];
UIImage *myImageObj = [[UIImage alloc] initWithContentsOfFile:imagePath];
[myImageObj drawInRect:CGRectMake(0, 40, 320, 400)];
}
把圖片放在矩形中顯示,由于矩形高度比例與圖片的原始比例不一樣導致圖片變形,這是使用drawInRect:方法進行繪制圖片時需要注意的。
/*NSString類中繪制文本主要的方法*/
//-(void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs 文本在指定點繪制
//-(void)drawInRect:(CGRect) withAttributes:(NSDictionary *)attrs 文本在指定的矩形里繪制
- (void)drawString
{
NSString *s = @"我的小馬";
UIFont *font = [UIFont systemFontOfSize:14.0];
NSDictionary *attr = @{NSFontAttributeName:font};
[s drawAtPoint:CGPointMake(100, 20) withAttributes:attr];
}