• 自定义按钮 图片+文字


    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);
        }
    }
    
    
    
  • 相关阅读:
    边缘检测
    图片融合
    毛玻璃
    图像添加马赛克
    图像颜色反转
    图像灰度处理
    图像仿射变换/旋转
    图像剪切/位移
    图像缩放/插值
    神经网络逼近股票价格
  • 原文地址:https://www.cnblogs.com/jyking/p/6737147.html
Copyright © 2020-2023  润新知