最近由于需要繪制界面的一些操作晦譬,用到了CALayer锡溯,需要自己去重繪layer。
- (void)drawInContext:(CGContextRef)ctx
需要自定義以上方法信峻,這個(gè)方法告訴你當(dāng)前的繪圖上下文為ctx;
使用core graphics那套方法倦青,繪制一直沒有出過問題,就是類似于
CGContextAddLineToPoint(...)盹舞、CGContextStrokePath(ctx)
等等一系列的C函數(shù)产镐。這些函數(shù)都可以在layer中成功繪制圖形。
由于需要在layer上繪制一些文字矾策。所以就需要用到UIKit中的一些繪圖方法磷账。比如:
- (void)drawAtPoint:(CGPoint)point withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (void)drawInRect:(CGRect)rect withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
在layer的重繪函數(shù)中調(diào)用這些方法,始終沒有辦法在layer上得到正確的顯示贾虽。
使用UIKit中的繪圖方法逃糟,如果不是在drawRect:方法中,你不指定當(dāng)前上下文蓬豁。是不知道往哪個(gè)ctx中畫的绰咽。所以就用到下面兩個(gè)函數(shù)
- (void)drawInContext:(CGContextRef)ctx
{
UIGraphicsPushContext(ctx); //將當(dāng)前上下文的context,壓到棧頂
NSString* stringNumber = @"hello world";
[stringNumber drawAtPoint:CGPointMake(20, 22) withAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:10.f],NSForegroundColorAttributeName:[UIColor blackColor]}];
UIGraphicsPopContext(); //繪圖結(jié)束前pop出context
}
隨手記一筆地粪,希望幫到有同樣困惑的同學(xué)~??