繪制自定義圖形?
1、初始化View,包括屬性橫軸間隔&縱軸間隔&
(設置空白View準備畫畫+設置當前筆頭顏色+設置當前畫筆粗細+設置畫筆初始位置+設置畫筆終點,傳入context繪制長方形)——
CGContextStrokePath(context)
CGContextSetLineWidth設置線的寬度。
CGContextStrokeRect繪制長方形。
CGContextSetRGBStrokeColor設置當前畫筆的顏色。
CGContextSetRGBFillColor設置填充顏色。
CGContextFillPath(ctx);//設置填充的路徑。
CGContextStrokePath繪制一個框,不填充。
CGContextClearRect橡皮擦,去掉一個矩形的內容。
CGContextStrokeRect繪制一個矩形框,未填充。
CGContextAddRect繪制一個實心矩形區域,框采用畫筆顏色,填充采用填充色,默認的填充色是黑色。
ios里面的繪制,在UIView中有個自帶的方法- (void)drawRect:(CGRect)rect實現,實現的過程可以跟現實生活中的繪畫過程相對比,例如如何畫一條直線,1.要準備一張紙,用于畫畫;2.要準備一支畫筆,能選擇筆頭的顏色,花筆的粗細;3.想好所畫線的起始點;4。動手畫下來
只有在View的drawRect方法中才能取得跟View相關聯的圖形上下文,將會隨著View調用而被調用。每一個View中都有一個layer(圖層)屬性,通過View里面的drawRect方法就能取得View的Layer Graphics Context(圖層圖形上下文),從而可以在View的layer上繪制圖形,要知道,本質上所有我們可以見到的View視圖都是基于底層的layer實現。只不過比起我們自定義的圖形來說,多了一個用戶交互的事件觸發。
本質上我們所見到的Button、Label、Image都是蘋果的開發工程師自己底層提前為我們在view的底層Layer圖層畫好了圖形樣式,我們要向使用官方不曾有過的圖形樣式,就必須通過重寫drawRect方法來實現。
iOS兩種繪圖(包括文字、圖像、漸變)方法?
1、使用原生的drawing技術,包括Core Graphics和UIKit框架,只支持2D 繪圖。
2、另一種方法使用OpenGL ES,2D 和3D都支持
UIView和layer的聯系?
所有的View都是由底層的Layer來驅動,我們表面上改變的是View的屬性,其實本質上還是得Layer發生了改變。比如說Frame發生了改變,還會出現一些動作改變時的動畫。所以執行動畫的時候,必須改變layer的屬性。盡管我們的Layer沒有可見的外觀,但它依然需要被添加到屏幕上的視圖層級里,以便動畫能正常工作。
關鍵幀制作gif動畫?
__block CGPoint center = view.center;
[UIView addKeyframeWithRelativeStartTime: 0 relativeDuration: 0.1 animations: ^{
view.center = (CGPoint){ center.x + 15, center.y + 80 };
}];
關鍵幀動畫的options參數?
UIViewKeyframeAnimationOptionCalculationModeLinear // 連續運算模式,線性
UIViewKeyframeAnimationOptionCalculationModeDiscrete // 離散運算模式,只顯示關鍵幀
UIViewKeyframeAnimationOptionCalculationModePaced // 均勻執行運算模式,線性
UIViewKeyframeAnimationOptionCalculationModeCubic // 平滑運算模式,貝塞爾曲線讓動畫更加平滑
UIViewKeyframeAnimationOptionCalculationModeCubicPaced // 平滑均勻運算模式
通過CGAffineTransform設置View層的transfrom屬性創建平面動畫?
1、CGAffineTransTranslate平移
2、CGAffineTransformScale縮放
注意:如果使用CGAffineTransformScale從1變到0,動畫提交之后,會直接保持動畫結束的狀態,想讓View變小,只需設為0.1的比例就行
3、CGAffineTransformMakeRotation旋轉(角度*M_PI/180)
4、CGAffineTransformInvert(transform)逆動畫
5、CGAffineTransformIdentity
6、CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)兩個平面變換效果同時進行
通過CATransform3D設置layer層的transfrom屬性展示3D效果?
1、導入QuartzCore.framework
2、CATransform3DMakeRotation(M_PI/6, 0, 1, 0)表示Y軸旋轉30°