程序员

TYPasterView 简单好用的iOS贴纸控件

2018-10-09  本文已影响99人  5ea1aaa189a6

最近无聊写了一个小轮子,主要功能就是为了实现类似微博相机的贴纸功能。轮子说明直接copy了github上的README。需要的朋友欢迎使用,吐槽,Star。

链接:https://github.com/Y-JunKang/TYPasterView

TYPasterView

这是一个贴纸控件的实现,简单易用。

使用

将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的大小。

上一篇下一篇

猜你喜欢

热点阅读