• 处理UIButton的图片和文字


    最近项目做了闲着没事,然后就针对项目的小功能封装一些常用的小控件,个人认为对于一般的app还是比较实用一点,button的image和lable可以在layoutSubviews自定义它们的位置,直接上代码:

     

     

    ps:简的的用法

    #import "ViewController.h"

    #import "YMTestButton.h"

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        /* 按钮 */

        YMTestButton *button = [[YMTestButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];

        button.backgroundColor = [UIColor greenColor];

        [button setImage:[UIImage imageNamed:@"tabbar_huipin_selected@3x.png"] forState:UIControlStateNormal];

        [button setTitle:@"我是测试" forState:UIControlStateNormal];

        [self.view addSubview:button];

    }

    @end

     

     

    ps:这是继承UIButton

     

    #import <UIKit/UIKit.h>

     

    @interface YMTestButton : UIButton

     

    @end

     

    ps:下面我写了三种情况,代码都附上

     

     

     

     

    #import "YMTestButton.h"

    #import "UIView+YMExtension.h"

     

    @implementation YMTestButton

     

    - (instancetype)initWithFrame:(CGRect)frame

    {

        if ([super initWithFrame:frame]) {

            

            self.titleLabel.textAlignment = NSTextAlignmentCenter;

        }

        

        return self;

    }

     

    - (void)layoutSubviews

    {

        [super layoutSubviews];

        

        self.imageView.ym_y = self.ym_height * 0.5 - self.imageView.ym_height;

        self.imageView.ym_x = self.ym_width * 0.5 - self.imageView.ym_width * 0.5;

        

        self.titleLabel.ym_y = self.imageView.ym_bottom + 10;

        self.titleLabel.ym_x = 0;

        self.titleLabel.ym_width = self.ym_width;

    }

     

    @end

     

     

     

     

     

    #import "YMTestButton.h"

    #import "UIView+YMExtension.h"

     

    @implementation YMTestButton

     

    - (instancetype)initWithFrame:(CGRect)frame

    {

        if ([super initWithFrame:frame]) {

            

            self.titleLabel.textAlignment = NSTextAlignmentCenter;

        }

        

        return self;

    }

     

    - (void)layoutSubviews

    {

        [super layoutSubviews];

        

        self.titleLabel.ym_y = self.ym_height * 0.5 - self.titleLabel.ym_height;

        self.titleLabel.ym_x = 0;

        self.titleLabel.ym_width = self.ym_width;

     

        self.imageView.ym_y = self.titleLabel.ym_bottom + 10;

        self.imageView.ym_x = self.ym_width * 0.5 - self.imageView.ym_width * 0.5;

     

    }

     

    @end

     

     

     

     

    #import "YMTestButton.h"

    #import "UIView+YMExtension.h"

     

    @implementation YMTestButton

     

    - (instancetype)initWithFrame:(CGRect)frame

    {

        if ([super initWithFrame:frame]) {

            

            self.titleLabel.textAlignment = NSTextAlignmentCenter;

        }

        

        return self;

    }

     

    - (void)layoutSubviews

    {

        [super layoutSubviews];

        

        self.titleLabel.ym_y = self.ym_height * 0.5 - self.titleLabel.ym_height;

        self.titleLabel.ym_x = 0;

     

        self.imageView.ym_x = self.titleLabel.ym_right + 5;

        self.imageView.ym_y = self.titleLabel.ym_bottom + 10;

     

    }

     

    @end

     

    ps:UIView+YMExtension.h这是参考MJ大神的(根据自己项目修改)

     

    #import <UIKit/UIKit.h>

     

    @interface UIView (YMExtension)

     

    /* 控件的size */

    @property (nonatomic, assign) CGSize ym_size;

    /* 控件的宽度 */

    @property (nonatomic, assign) CGFloat ym_width;

    /* 控件的高度 */

    @property (nonatomic, assign) CGFloat ym_height;

    /* 控件的x */

    @property (nonatomic, assign) CGFloat ym_x;

    /* 控件的y */

    @property (nonatomic, assign) CGFloat ym_y;

    /* 控件的中心x */

    @property (nonatomic, assign) CGFloat ym_centerX;

    /* 控件的中心Y */

    @property (nonatomic, assign) CGFloat ym_centerY;

    /* 控制件的右边 */

    @property (nonatomic, assign) CGFloat ym_right;

    /* 控件的底部 */

    @property (nonatomic, assign) CGFloat ym_bottom;

     

    @end

     

     

     

     

    #import "UIView+YMExtension.h"

     

    @implementation UIView (YMExtension)

     

    - (CGSize)ym_size

    {

        return self.frame.size;

    }

     

    - (void)setYm_size:(CGSize)ym_size

    {

        CGRect frame = self.frame;

        frame.size = ym_size;

        self.frame = frame;

    }

     

    - (CGFloat)ym_width

    {

        return self.frame.size.width;

    }

     

    - (void)setYm_(CGFloat)ym_width

    {

        CGRect frame = self.frame;

        frame.size.width = ym_width;

        self.frame = frame;

    }

     

    - (CGFloat)ym_height

    {

        return self.frame.size.height;

    }

     

    - (void)setYm_height:(CGFloat)ym_height

    {

        CGRect frame = self.frame;

        frame.size.height = ym_height;

        self.frame = frame;

    }

     

    - (CGFloat)ym_x

    {

        return self.frame.origin.x;

    }

     

    - (void)setYm_x:(CGFloat)ym_x

    {

        CGRect frame = self.frame;

        frame.origin.x = ym_x;

        self.frame = frame;

    }

     

    - (CGFloat)ym_y

    {

        return self.frame.origin.y;

    }

     

    - (void)setYm_y:(CGFloat)ym_y

    {

        CGRect frame = self.frame;

        frame.origin.y = ym_y;

        self.frame = frame;

    }

     

    - (CGFloat)ym_centerX

    {

        return self.center.x;

    }

     

    - (void)setYm_centerX:(CGFloat)ym_centerX

    {

        CGPoint center = self.center;

        center.x = ym_centerX;

        self.center = center;

    }

     

    - (CGFloat)ym_centerY

    {

        return self.center.y;

    }

     

    - (void)setYm_centerY:(CGFloat)ym_centerY

    {

        CGPoint center = self.center;

        center.y = ym_centerY;

        self.center = center;

    }

     

    - (CGFloat)ym_right

    {

        return CGRectGetMaxX(self.frame);

    }

     

    - (void)setYm_right:(CGFloat)ym_right

    {

        self.ym_x = ym_right - self.ym_width;

    }

     

    - (CGFloat)ym_bottom

    {

        return CGRectGetMaxY(self.frame);

    }

     

    - (void)setYm_bottom:(CGFloat)ym_bottom

    {

        self.ym_y = ym_bottom - self.ym_height;

    }

     

    @end

     

     

  • 相关阅读:
    JAVA面向对象学习——java集合———泛型
    JAVA面向对象学习——java多线程———线程的创建和启动——使用Callable和Future创建线程
    JAVA面向对象学习——java多线程———控制线程——join() 方法——当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join方法加入的join线程完成为止
    JAVA面向对象学习——java多线程———线程的生命周期——新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态
    Mac下使用MAMP配置Nginx
    ohmyzsh配置 alias 指定指令别名
    mysql8安装
    从零搭建php环境php8扩展redis
    MAMP PRO 使用指南 (配置nginx 重写)
    git 切换分支时,报:Unable to create 'D:/xxx/.git/index.lock': File exists. Another git process seems to be running in this repository, e.g.an editor opened by 'git commit'. Please make sure all p
  • 原文地址:https://www.cnblogs.com/ljj-Andrew-519/p/7183265.html
Copyright © 2020-2023  润新知