zoukankan      html  css  js  c++  java
  • 自定义按钮 图片+文字

    UIButton同时设置Title和Image后,默认是图片在左文字在右,但是很多情况下我们希望图片和文字的位置多样化!

    #import <UIKit/UIKit.h>
    
    /*
     针对同时设置了Image和Title的场景时UIButton中的图片和文字的关系
     */
    typedef NS_ENUM(NSInteger, ButtonImageTitleStyle ) {
        ButtonImageTitleStyleDefault = 0,       //图片在左,文字在右,整体居中。
        ButtonImageTitleStyleLeft  = 0,         //图片在左,文字在右,整体居中。
        ButtonImageTitleStyleRight     = 2,     //图片在右,文字在左,整体居中。
        ButtonImageTitleStyleTop  = 3,          //图片在上,文字在下,整体居中。
        ButtonImageTitleStyleBottom    = 4,     //图片在下,文字在上,整体居中。
        ButtonImageTitleStyleCenterTop = 5,     //图片居中,文字在上距离按钮顶部。
        ButtonImageTitleStyleCenterBottom = 6,  //图片居中,文字在下距离按钮底部。
        ButtonImageTitleStyleCenterUp = 7,      //图片居中,文字在图片上面。
        ButtonImageTitleStyleCenterDown = 8,    //图片居中,文字在图片下面。
        ButtonImageTitleStyleRightLeft = 9,     //图片在右,文字在左,距离按钮两边边距
        ButtonImageTitleStyleLeftRight = 10,    //图片在左,文字在右,距离按钮两边边距
    };
    
    @interface UIButton (Category)
    
    
    /**
     *  按钮样式
     *
     *  UIButtonTitleWithImageAlignment 样式
     *  @param imgTextDistance               距离图片和标题,默认是5
     */
    -(void)setButtonTitleWithImageAlignment:(ButtonImageTitleStyle)style imgTextDistance:(CGFloat)padding;
    @end
    
    //
    //  UIButton+Category.m
    //  DaoLanTianXia
    //
    //  Created by JY Mac on 16/6/7.
    //  Copyright © 2016年 zjy. All rights reserved.
    //
    
    #import "UIButton+Category.h"
    
    @implementation UIButton (Category)
    
    -(void)setButtonTitleWithImageAlignment:(ButtonImageTitleStyle)style imgTextDistance:(CGFloat)padding;
    {
    
        if (self.imageView.image != nil && self.titleLabel.text != nil)
        {
            //先还原
            self.titleEdgeInsets = UIEdgeInsetsZero;
            self.imageEdgeInsets = UIEdgeInsetsZero;
            
            CGRect imageRect = self.imageView.frame;
            CGRect titleRect = self.titleLabel.frame;
            
            CGFloat totalHeight = imageRect.size.height + padding + titleRect.size.height;
            CGFloat selfHeight = self.frame.size.height;
            CGFloat selfWidth = self.frame.size.width;
            
            switch (style) {
                case ButtonImageTitleStyleLeft:
                    if (padding != 0)
                    {
                        self.titleEdgeInsets = UIEdgeInsetsMake(0,
                                                                padding/2,
                                                                0,
                                                                -padding/2);
                        
                        self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                                -padding/2,
                                                                0,
                                                                padding/2);
                    }
                    break;
                case ButtonImageTitleStyleRight:
                {
                    //图片在右,文字在左
                    self.titleEdgeInsets = UIEdgeInsetsMake(0,
                                                            -(imageRect.size.width + padding/2),
                                                            0,
                                                            (imageRect.size.width + padding/2));
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (titleRect.size.width+ padding/2),
                                                            0,
                                                            -(titleRect.size.width+ padding/2));
                }
                    break;
                case ButtonImageTitleStyleTop:
                {
                    //图片在上,文字在下
                    self.titleEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 + imageRect.size.height + padding - titleRect.origin.y),
                                                            (selfWidth/2 - titleRect.origin.x - titleRect.size.width /2) - (selfWidth - titleRect.size.width) / 2,
                                                            -((selfHeight - totalHeight)/2 + imageRect.size.height + padding - titleRect.origin.y),
                                                            -(selfWidth/2 - titleRect.origin.x - titleRect.size.width /2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 - imageRect.origin.y),
                                                            (selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            -((selfHeight - totalHeight)/2 - imageRect.origin.y),
                                                            -(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2));
                    
                }
                    break;
                case ButtonImageTitleStyleBottom:
                {
                    //图片在下,文字在上。
                    self.titleEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 - titleRect.origin.y),
                                                            (selfWidth/2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                                            -((selfHeight - totalHeight)/2 - titleRect.origin.y),
                                                            -(selfWidth/2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 + titleRect.size.height + padding - imageRect.origin.y),
                                                            (selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            -((selfHeight - totalHeight)/2 + titleRect.size.height + padding - imageRect.origin.y),
                                                            -(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2));
                }
                    break;
                case ButtonImageTitleStyleCenterTop:
                {
                    self.titleEdgeInsets = UIEdgeInsetsMake(-(titleRect.origin.y - padding),
                                                            (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                                            (titleRect.origin.y - padding),
                                                            -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            0,
                                                            -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2));
                }
                    break;
                case ButtonImageTitleStyleCenterBottom:
                {
                    self.titleEdgeInsets = UIEdgeInsetsMake((selfHeight - padding - titleRect.origin.y - titleRect.size.height),
                                                            (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                                            -(selfHeight - padding - titleRect.origin.y - titleRect.size.height),
                                                            -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            0,
                                                            -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2));
                }
                    break;
                case ButtonImageTitleStyleCenterUp:
                {
                    self.titleEdgeInsets = UIEdgeInsetsMake(-(titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding),
                                                            (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                                            (titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding),
                                                            -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            0,
                                                            -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2));
                }
                    break;
                case ButtonImageTitleStyleCenterDown:
                {
                    self.titleEdgeInsets = UIEdgeInsetsMake((imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding),
                                                            (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                                            -(imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding),
                                                            -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2);
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                                            0,
                                                            -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2));
                }
                    break;
                case ButtonImageTitleStyleRightLeft:
                {
                    //图片在右,文字在左,距离按钮两边边距
                    
                    self.titleEdgeInsets = UIEdgeInsetsMake(0,
                                                            -(titleRect.origin.x - padding),
                                                            0,
                                                            (titleRect.origin.x - padding));
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth - padding - imageRect.origin.x - imageRect.size.width),
                                                            0,
                                                            -(selfWidth - padding - imageRect.origin.x - imageRect.size.width));
                }
                    
                    break;
                    
                case ButtonImageTitleStyleLeftRight:
                {
                    //图片在左,文字在右,距离按钮两边边距
                    
                    self.titleEdgeInsets = UIEdgeInsetsMake(0,
                                                            (selfWidth - padding - titleRect.origin.x - titleRect.size.width),
                                                            0,
                                                            -(selfWidth - padding - titleRect.origin.x - titleRect.size.width));
                    
                    self.imageEdgeInsets = UIEdgeInsetsMake(0,
                                                            -(imageRect.origin.x - padding),
                                                            0,
                                                            (imageRect.origin.x - padding));
                    
                    
                    
                }
                    break;
                default:
                    break;
            }
        }
        else {
            self.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
            self.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
        }
    }
    
    
    
  • 相关阅读:
    [转]常用数字处理算法的Verilog实现
    [转]Linux必学的60个命令
    [转]4位超前进位加法器代码及原理
    [转]FPGA & Verilog开发经验若干
    [转]Verilog中parameter和define的区别
    [转]VIM标记 mark 详解
    关于获取服务的需求列表
    Office 2007 探索之路 Outlook
    利用反射建立单一调用的WebService
    寻宝记
  • 原文地址:https://www.cnblogs.com/jyking/p/6737147.html
Copyright © 2011-2022 走看看