您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在IOS中使用CALayer繪制圖片,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
IOS 中CALayer繪制圖片的實例詳解
CALayer渲染內(nèi)容圖層。與UIImageView相比,不具有事件響應(yīng)功能,且UIImageView是管理內(nèi)容。
注意事項:如何使用delegate對象執(zhí)行代理方法進(jìn)行繪制,切記需要將delegate設(shè)置為nil,否則會導(dǎo)致異常crash。
代碼示例:
CGPoint position = CGPointMake(160.0, 200.0); CGRect bounds = CGRectMake(0.0, 0.0, 150.0, 150.0); CGFloat cornerRadius = 150.0 / 2; CGFloat borderWidth = 2.0;
// 陰影層 CALayer *layerShadow = [[CALayer alloc] init]; layerShadow.position = position; layerShadow.bounds = bounds; layerShadow.cornerRadius = cornerRadius; layerShadow.borderWidth = borderWidth; layerShadow.borderColor = [UIColor whiteColor].CGColor; layerShadow.shadowColor = [UIColor grayColor].CGColor; layerShadow.shadowOffset = CGSizeMake(2.0, 1.0); layerShadow.shadowOpacity = 1.0; layerShadow.shadowRadius = 3.0; [self.view.layer addSublayer:layerShadow];
// 容器層 CALayer *layerContant = [[CALayer alloc] init]; // 添加到父圖層 [self.view.layer addSublayer:layerContant]; // 圖層中心點、大?。ㄖ行狞c和大小構(gòu)成frame) layerContant.position = position; layerContant.bounds = bounds; // 圖層背景顏色 layerContant.backgroundColor = [UIColor redColor].CGColor; // 圖層圓角半徑 layerContant.cornerRadius = cornerRadius; // 圖層蒙版、子圖層是否剪切圖層邊界 // layerContant.mask = nil; layerContant.masksToBounds = YES; // 邊框?qū)挾?、顏?nbsp; layerContant.borderWidth = borderWidth; layerContant.borderColor = [UIColor whiteColor].CGColor; // 陰影顏色、偏移量、透明度、形狀、模糊半徑 // layerContant.shadowColor = [UIColor grayColor].CGColor; // layerContant.shadowOffset = CGSizeMake(2.0, 1.0); // layerContant.shadowOpacity = 1.0; // CGMutablePathRef path = CGPathCreateMutable(); // layerContant.shadowPath = path; // layerContant.shadowRadius = 3.0; // 圖層透明度 layerContant.opacity = 1.0;
// 繪制圖片顯示方法1 // 圖層形變 // 旋轉(zhuǎn)(angle轉(zhuǎn)換弧度:弧度=角度*M_PI/180;x上下對換、y左右對換、z先上下對換再左右對換;-1.0~1.0) // layerContant.transform = CATransform3DMakeRotation(M_PI, 0.0, 0.0, 0.0); // 縮放(0.0~1.0) // layerContant.transform = CATransform3DMakeScale(0.8, 0.8, 0.8); // 移動 // layerContant.transform = CATransform3DMakeTranslation(10.0, 1.0, 1.0); // 顯示內(nèi)容 [layerContant setContents:[UIImage imageNamed:@"header"].CGImage];
繪制圖片顯示方法2
layerContant.delegate = self; [layerContant setNeedsDisplay]; - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { // 繪圖 CGContextSaveGState(ctx); // 圖形上下文形變,避免圖片倒立顯示 CGContextScaleCTM(ctx, 1.0, -1.0); CGContextTranslateCTM(ctx, 0.0, -150.0); // 圖片 UIImage *image = [UIImage imageNamed:@"header"]; CGContextDrawImage(ctx, CGRectMake(0.0, 0.0, 150.0, 150.0), image.CGImage); CGContextRestoreGState(cox); }
// 繪制實線、虛線 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { // 繪實線 // 線條寬 CGContextSetLineWidth(ctx, 1.0); // 線條顏色 // CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); CGContextSetStrokeColorWithColor(ctx, [UIColor greenColor].CGColor); // 方法1 // 坐標(biāo)點數(shù)組 CGPoint aPoints[2]; aPoints[0] = CGPointMake(10.0, 50.0); aPoints[1] = CGPointMake(140.0, 50.0); // 添加線 points[]坐標(biāo)數(shù)組,和count大小 CGContextAddLines(ctx, aPoints, 2); // 根據(jù)坐標(biāo)繪制路徑 CGContextDrawPath(ctx, kCGPathStroke); // 方法2 CGContextSetLineWidth(ctx, 5.0); CGContextSetStrokeColorWithColor(ctx, [UIColor purpleColor].CGColor); CGContextMoveToPoint(ctx, 10.0, 60.0); // 起點坐標(biāo) CGContextAddLineToPoint(ctx, 140.0, 60.0); // 終點坐標(biāo) CGContextStrokePath(ctx); // 繪制路徑 // 繪虛線 // 線條寬 CGContextSetLineWidth(ctx, 2.0); // 線條顏色 CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor); // 虛線 CGFloat dashArray[] = {1, 1, 1, 1}; CGContextSetLineDash(ctx, 1, dashArray, 1); // 起點 CGContextMoveToPoint(ctx, 10.0, 100.0); // 終點 CGContextAddLineToPoint(ctx, 140.0, 100.0); // 繪制路徑 CGContextStrokePath(ctx); }
// 內(nèi)存管理,避免異常crash - (void)dealloc { for (CALayer *layer in self.view.layer.sublayers) { if ([layer.delegate isEqual:self]) { layer.delegate = nil; } } NSLog(@"%@ 被釋放了~", self); }
上述內(nèi)容就是如何在IOS中使用CALayer繪制圖片,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。