美文网首页程序员
TYPasterView 简单好用的iOS贴纸控件

TYPasterView 简单好用的iOS贴纸控件

作者: 5ea1aaa189a6 | 来源:发表于2018-10-09 23:40 被阅读99次

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

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

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

    相关文章

      网友评论

        本文标题:TYPasterView 简单好用的iOS贴纸控件

        本文链接:https://www.haomeiwen.com/subject/cyjuaftx.html