用两张图片实现类似于聊天气泡等的特殊轮廓图片的效果(已封装可以自定义修改)

本文介绍如何使用Objective-C语言新建一个继承于UIView的类,并通过CALayer和CAShapeLayer实现一个带有特殊轮廓的图片视图。通过两张图片的组合,可以自定义实现复杂的视觉效果。
摘要由CSDN通过智能技术生成

新建一个类 继承于UIView

.h文件如下

#import <UIKit/UIKit.h>

@interface WQChatImgaView : UIView
/**
 *  给外部提供一个image属性
 */
@property (nonatomic, strong) UIImage *image;

@end

.m实现如下

#import "WQChatImgaView.h"

@implementation WQChatImgaView

{
    CALayer      *_contentLayer;
    CAShapeLayer *_maskLayer;
}
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}
- (void)setup
{
    _maskLayer = [CAShapeLayer layer];
    _maskLayer.fillColor = [UIColor blackColor].CGColor;
    _maskLayer.strokeColor = [UIColor clearColor].CGColor;
    _maskLayer.frame = self.bounds;
    _maskLayer.contentsCenter = CGRectMake(0.5, 0.5, 0.1, 0.1);
    //非常关键设置自动拉伸的效果且不变形
    _maskLayer.contentsScale = [UIScreen mainScreen].scale;
    _maskLayer.contents = (id)[UIImage imageNamed:@"chat_send_nor@2x"].CGImage;
    
    _contentLayer = [CALayer layer];
    _contentLayer.mask = _maskLayer;
    _contentLayer.frame = self.bounds;
    [self.layer addSublayer:_contentLayer];
    
}

- (void)setImage:(UIImage *)image
{
    _contentLayer.contents = (id)image.CGImage;
}


@end

在控制器中的使用

#import "ViewController.h"
#import "WQChatImgaView.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // 1.直接初始化
    WQChatImgaView *shapedImageView = [[WQChatImgaView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
    // 2.设置imgage
    shapedImageView.image = [UIImage imageNamed:@"u=2366071268,3648144310&fm=58"];
    [self.view addSubview:shapedImageView];
}

@end

最终实现效果如下

总结:只需两张图片即可完全自定义实现特殊轮廓的图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值