iOS頭像效果的實(shí)現(xiàn)(邊框、陰影、可點(diǎn)擊)

標(biāo)簽:

一、目的:實(shí)現(xiàn)一個(gè)帶有立體感效果的圖像

二、效果圖:

三、組成介紹:

1、一個(gè)UIImageView?(用來(lái)顯示照片的)

2、CALayer     ??(用來(lái)顯示背景的陰影效果)

3、手勢(shì)      ?。c(diǎn)擊照片有反應(yīng),可以添加一些查看頭像以及改頭像的效果)

四、代碼如下:

1//添加一個(gè)圓形圖片,帶內(nèi)邊框

2UIImageView *headImage=[[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];

3[headImage setBackgroundColor:[UIColor blueColor]];

4headImage.layer.cornerRadius=50;

//設(shè)置圓形效果是根據(jù)這個(gè)imageVeiw的寬度來(lái)設(shè)定的

5headImage.image=[UIImage imageNamed:@"image.png"];

6headImage.contentMode=UIViewContentModeScaleAspectFill;

7headImage.clipsToBounds=YES;

//這里必須設(shè)置將圖片剪切成圓形,而陰影效果是在園外的,所以不可以在這個(gè)ImageView添加陰影8headImage.layer.borderWidth=3;

//雖然不可以添加陰影效果,但是可以添加一個(gè)內(nèi)邊框效果,感覺(jué)蠻好看的9headImage.layer.borderColor=[UIColor colorWithRed:1.0green:1.0blue:1.0alpha:0.6].CGColor;

//設(shè)置顏色和透明度10[self.view addSubview:headImage];

11//添加背景

12CALayer *layer=[[CALayer alloc]init];

13layer.position=headImage.layer.position;

//這里是個(gè)人喜好這么寫(xiě)

14layer.bounds=headImage.bounds;

15layer.cornerRadius=headImage.layer.cornerRadius;

16layer.backgroundColor=[UIColor blackColor].CGColor;//這里必須設(shè)置layer層的背景顏色,默認(rèn)應(yīng)該是透明的,導(dǎo)致設(shè)置的陰影顏色無(wú)法顯示出來(lái)

17layer.shadowColor=[UIColor grayColor].CGColor;     //設(shè)置陰影的顏色18layer.shadowRadius=5;               //設(shè)置陰影的寬度19layer.shadowOffset=CGSizeMake(2,2);      //設(shè)置偏移20layer.shadowOpacity=1;

21[self.view.layer addSublayer:layer];

22[self.view bringSubviewToFront:headImage];

23//添加手勢(shì)

24UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickedTheImage)];//響應(yīng)方法沒(méi)寫(xiě)25headImage.userInteractionEnabled=YES;///必須設(shè)置用戶交互,手勢(shì)才有用26[headImage addGestureRecognizer:tap];

五、總結(jié)和注意事項(xiàng)

1.給imageView添加了圖片并且設(shè)置了clipsToBounds后不可顯示外部的陰影效果了,因?yàn)殛幱靶Ч褪窃谕獠吭O(shè)置的,一經(jīng)剪切就沒(méi)有了,所以要再加一個(gè)CALayer來(lái)顯示這個(gè)陰影效果。

2.給imgeView添加圖片時(shí)要設(shè)置clipsToBounds=Y(jié)ES;這樣才可以將圖片設(shè)置為圓形;

3.imageView的邊界效果是

headImage.layer.borderWidth=3;

headImage.layer.borderColor=[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.6].CGColor;

4.要在CALayer層顯示陰影效果,必須設(shè)置CALayer的背景顏色

5.添加CALayer層之后要將ImageView設(shè)置到最前端

6.手勢(shì)添加后要設(shè)置手勢(shì)的交互,不然不能響應(yīng)

headImage.userInteractionEnabled=YES;


- (IBAction)minus:(id)sender {

self.radius = @([self.radius floatValue]+10.0f);

[self redrawImage];

}

- (IBAction)plus:(id)sender {

self.radius = @([self.radius floatValue]-10.0f);

[self redrawImage];

}

-(void)redrawImage

{

//set the original image first

[_imageView setImage:[UIImage imageNamed:@"your image goes here"]];

CGFloat size = [self.radius floatValue];

CGContextRef context = CGBitmapContextCreate(NULL, self.view.bounds.size.width, self.view.bounds.size.height, 8, 4 * self.view.bounds.size.width, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst);

CGContextAddArc(context, 320/2, 460/2, size, 0, 2*M_PI, 0);

CGContextClosePath(context);

CGContextClip(context);

CGContextDrawImage(context, self.view.bounds, _imageView.image.CGImage);

CGImageRef imageMasked = CGBitmapContextCreateImage(context);

CGContextRelease(context);

UIImage *newImage = [UIImage imageWithCGImage:imageMasked];

CGImageRelease(imageMasked);

[_imageView setImage:newImage];

UIGraphicsEndImageContext();

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,696評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你可以看...
    F麥子閱讀 5,271評(píng)論 5 13
  • Core Animation其實(shí)是一個(gè)令人誤解的命名。你可能認(rèn)為它只是用來(lái)做動(dòng)畫(huà)的,但實(shí)際上它是從一個(gè)叫做Laye...
    小貓仔閱讀 3,968評(píng)論 1 4
  • 轉(zhuǎn)載:http://www.itdecent.cn/p/32fcadd12108 每個(gè)UIView有一個(gè)伙伴稱為l...
    F麥子閱讀 6,594評(píng)論 0 13
  • 一、CAShapelayer 我們知道可以不使用圖片情況下利用CGpath去構(gòu)建任意形狀的陰影。其實(shí)我們也可...
    小貓仔閱讀 1,822評(píng)論 0 5

友情鏈接更多精彩內(nèi)容