TYPasterView 简单好用的iOS贴纸控件
2018-10-09 本文已影响99人
5ea1aaa189a6
最近无聊写了一个小轮子,主要功能就是为了实现类似微博相机的贴纸功能。轮子说明直接copy了github上的README。需要的朋友欢迎使用,吐槽,Star。
TYPasterView
这是一个贴纸控件的实现,简单易用。
- 支持拖拽,旋转,缩放手势。
- 支持旋转,缩放,删除按钮。
- 支持图片,文字,自定义view
- 多贴纸控件管理。
使用
将TYPaster文件夹拖进工程中,并在需要使用的文件内#import "TYPasterView.h"
,以下为简单的代码示例。
// 图片
UIImage *image = [UIImage imageNamed:@"imageName"];
TYPasterView * view1 = [[TYPasterManager sharedInstance] pasterWithImage:image];
view1.frame = (CGRect){CGPointZero,CGSizeMake(150, 100)};
view1.center = CGPointMake(200, 200);
[self.view addSubview:view1];
// 文本
NSString *text = self.pasterLabel.text;
TYPasterView * view2 = [[TYPasterManager sharedInstance] pasterWithText:text];
view2.frame = (CGRect){CGPointZero,CGSizeMake(150, 100)};
view2.center = CGPointMake(200, 200);
[self.view addSubview:view2];
// 自定义view
UISwitch *switchView = [[UISwitch alloc]init];
TYPasterView * view3 = [[TYPasterManager sharedInstance] pasterWithCustomeView:switchView];
view3.frame = (CGRect){CGPointZero,CGSizeMake(150, 100)};
view3.center = CGPointMake(200, 200);
[self.view addSubview:view3];
效果
image.png实际效果请运行TYPasterDemo查看。
实现说明
其实没啥技术含量,比较麻烦的是贴纸的几个subview按钮在整个贴纸view进行仿射变换的时候也会跟着一起变换大小,效果很不好。无奈最后只好手动计算调节大小和位置了。比较关键的代码如下:
- (void)updateControls {
CGFloat invertScale = 1 / _scale;
CGAffineTransform transformControl = CGAffineTransformScale(CGAffineTransformIdentity, invertScale, invertScale);
for(TYPasterControl *control in _controlsSet) {
control.transform = transformControl;
}
self.topLine.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, invertScale);
self.leftLine.transform = CGAffineTransformScale(CGAffineTransformIdentity, invertScale, 1);
self.bottomLine.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, invertScale);
self.rightLine.transform = CGAffineTransformScale(CGAffineTransformIdentity, invertScale, 1);
}
说白了就是在每次手势结束后会计算缩放的比例然后调整btn的大小。