个人头像

图文无关.png

现在几乎每一个app都会有登录注册,有登陆注册就会有头像。
为了方便调用下面封装了一下个人头像的代码,大牛可绕道_

个人头像有以下几个属性:

/** 头像边框颜色 (默认白色)*/
@property (nonatomic, strong)UIColor *strokeColor;
/** 头像边框宽度 (默认2.0)*/
@property (nonatomic, assign)CGFloat strokeWidth;
/** 原始头像占位图片 */
@property (nonatomic, strong)UIImage *originalImage;
/** 是否需要头像阴影 (默认无)*/
@property (nonatomic, assign)BOOL needShadow;
/** 头像 */
@property (nonatomic, assign)CircleHeadViewContentType contentType;

总之封装的时候 就一个思想 把他当做一个对象来考虑。
下面是源码(直接复制粘贴即可使用)👇

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSInteger, CircleHeadViewContentType) {

    CircleHeadViewContentResize,
    CircleHeadViewContentResizeAspect,
    CircleHeadViewContentResizeAspectFill,
};

@interface ZJCircleHeadView : UIView
/** 头像边框颜色 (默认白色)*/
@property (nonatomic, strong)UIColor *strokeColor;
/** 头像边框宽度 (默认2.0)*/
@property (nonatomic, assign)CGFloat strokeWidth;
/** 原始头像占位图片 */
@property (nonatomic, strong)UIImage *originalImage;
/** 是否需要头像阴影 (默认无)*/
@property (nonatomic, assign)BOOL needShadow;
/** 头像 */
@property (nonatomic, assign)CircleHeadViewContentType contentType;

- (void)setCircleImage:(UIImage *)image;

@end
#import "ZJCircleHeadView.h"

@implementation ZJCircleHeadView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        //默认 没有头像阴影
        self.needShadow = NO;
        //默认边框颜色 白色
        self.strokeColor = [UIColor whiteColor];
        //默认边框宽度 2.0
        self.strokeWidth = 2.0;
        self.contentType = CircleHeadViewContentResize;
    }
    return self;
}

- (void)setCircleImage:(UIImage *)image
{
    
    self.originalImage = image;
    
    CGRect bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.height);
    CGFloat cornerRadius = self.bounds.size.height/2;
    
    if (self.needShadow) {
        // 创建阴影层
        [self createShadowLayer:bounds cornerRadius:cornerRadius];
    }
    // 创建照片层
    [self createImageLayer:bounds cornerRadius:cornerRadius];
}

- (void)createShadowLayer:(CGRect)bounds cornerRadius:(CGFloat)cornerRadius
{
    CALayer *layerShadow = [[CALayer alloc]init];
    layerShadow.bounds = bounds;
    layerShadow.position = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    layerShadow.cornerRadius = cornerRadius;
    layerShadow.shadowColor = [UIColor grayColor].CGColor;
    layerShadow.shadowOffset = CGSizeMake(2, 2);
    layerShadow.shadowOpacity = 1;
    layerShadow.borderColor = self.strokeColor.CGColor;
    layerShadow.borderWidth = self.strokeWidth;
    [self.layer addSublayer:layerShadow];
}

- (void)createImageLayer:(CGRect)bounds cornerRadius:(CGFloat)cornerRadius
{
    CALayer *layer = [[CALayer alloc]init];
    layer.bounds = bounds;
    layer.position = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    layer.backgroundColor = [UIColor blackColor].CGColor;
    layer.cornerRadius = cornerRadius;
    layer.masksToBounds = YES;
    layer.borderColor = self.strokeColor.CGColor;
    layer.borderWidth = self.strokeWidth;
    layer.contents = (id)self.originalImage.CGImage;
    [self.layer addSublayer:layer];
    switch (self.contentType) {
        case CircleHeadViewContentResize:
        {
            layer.contentsGravity = kCAGravityResize;
        }
            break;
        case CircleHeadViewContentResizeAspect:
        {
            layer.contentsGravity = kCAGravityResizeAspect;
        }
            break;
        case CircleHeadViewContentResizeAspectFill:
        {
            layer.contentsGravity = kCAGravityResizeAspectFill;
        }
            break;
            
        default:
            break;
    }
}

@end

使用如下👇

    //头像
    _headView = [[ZJCircleHeadView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
    _headView.center = CGPointMake(centerView.frame.size.width / 2, _headView.frame.size.height / 2);
    _headView.needShadow = YES;
    _headView.strokeWidth = 2.0;
    _headView.strokeColor = [UIColor whiteColor];
    _headView.contentType = CircleHeadViewContentResizeAspectFill;
    [_headView setCircleImage:[UIImage imageNamed:@"head"]];
    [centerView addSubview:_headView];
头像效果.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,421评论 25 707
  • 本文的最终效果如下: 头像动画的实现主要是利用了appbarLayout的AppBarLayout.OnOffse...
    houlucky阅读 10,965评论 13 89
  • 严格意义上来讲,只是今天闲着无事的PS的练习,但觉得还蛮有趣,所以就想写一下,也算是笔记和思考吧。 之前一直写PP...
    大梦Power阅读 977评论 2 4
  • 看到春节晚会上唐嫣和罗晋牵着手合唱<<最浪漫的事>>,心那一刻莫名的就静了下来,安静的认真的听着这首歌,看着他们嘴...
    Do小妹阅读 223评论 0 0