Swift基础Swift - UI

4、UIViewController、UIView、UIImag

2020-03-02  本文已影响0人  爱玩游戏的iOS菜鸟

视图控制器

UIViewController扩展
import UIKit

enum NavigationItemType {
    case NavigationItemTitle
    case NavigationItemImage
}

extension UIViewController{
    //设置导航栏标题
    func setNavigationTitle(_ title:String) {
        navigationItem.title = title
    }
    //push到下一个控制器
    func push(to viewController: UIViewController) {
        navigationController?.pushViewController(viewController, animated: true)
    }

    //FP写法
    /// 添加导航栏左侧按钮
    /// - Parameter title: 按钮文字
    func addLeftNavigationTitleItem(_ title: String) -> (UIColor) -> (CGFloat) -> (Selector) -> (){
        { color in
            { fontSize in
                { sec in
                    let item = self.addNavigationItem(title)(.NavigationItemTitle)(color)(fontSize)(sec)
                    self.navigationItem.leftBarButtonItem = item
                }
            }
        }
    }
    
    /// 添加导航栏左侧按钮
    /// - Parameter image: 按钮图片名
    func addLeftNavigationImageItem(_ image: String) -> (UIColor) -> (CGFloat) -> (Selector) -> (){
        { color in
            { fontSize in
                { sec in
                    let item = self.addNavigationItem(image)(.NavigationItemImage)(color)(fontSize)(sec)
                    self.navigationItem.leftBarButtonItem = item
                }
            }
        }
    }
    /// 添加导航栏右侧按钮
    /// - Parameter image: 按钮文字
    func addRightNavigationTitleItem(_ title: String) -> (UIColor) -> (CGFloat) -> (Selector) -> (){
        { color in
            { fontSize in
                { sec in
                    let item = self.addNavigationItem(title)(.NavigationItemTitle)(color)(fontSize)(sec)
                    self.navigationItem.rightBarButtonItem = item
                }
            }
        }
    }
    /// 添加导航栏右侧按钮
    /// - Parameter image: 按钮图片名
    func addRightNavigationImageItem(_ image: String) -> (UIColor) -> (CGFloat) -> (Selector) -> (){
        { color in
            { fontSize in
                { sec in
                    let item = self.addNavigationItem(image)(.NavigationItemImage)(color)(fontSize)(sec)
                    self.navigationItem.rightBarButtonItem = item
                }
            }
        }
    }
    
    
    fileprivate func addNavigationItem(_ title: String) -> (NavigationItemType) -> (UIColor) -> (CGFloat) -> (Selector) -> (UIBarButtonItem) {
        { type in
            { color in
                { fontSize in
                    {sec in
                        let button = UIButton(type: UIButton.ButtonType.custom)
                        
                        switch type {
                        case .NavigationItemTitle:
                            button.setTitle(title, for: UIControl.State.normal)
                            
                            let width = 20 + 18*(title.count - 1);
                            button.frame = CGRect(x: 0, y: 0, width: width, height: 44)
                            button.setTitleColor(color, for: UIControl.State.normal)
                            button.titleLabel?.font = UIFont.systemFont(ofSize: fontSize)
                            
                        case .NavigationItemImage:
                            button.setImage(UIImage(named: title), for: UIControl.State.normal)
                            button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
                        }
                        
                        button.addTarget(self, action: sec, for: UIControl.Event.touchUpInside)
                        return UIBarButtonItem(customView: button)
                    }
                }
            }
        }
    }
}
UIImage扩展
extension UIImage{
    static func imageWithColor(_ color: UIColor) -> UIImage {
        let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
        UIGraphicsBeginImageContext(rect.size)
        
        let context: CGContext = UIGraphicsGetCurrentContext()!
        context.setFillColor(color.cgColor)
        context.fill(rect)
        
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext();
        
        return image;
    }
}
UIView扩展
extension UIView {
    var x :CGFloat {
        set{
            var newframe = frame
            newframe.origin.x = newValue
            frame = newframe
        }
        get{
            frame.origin.x
        }
    }
    
    var y :CGFloat {
        set{
            var newframe = frame
            newframe.origin.y = newValue
            frame = newframe
        }
        get{
            frame.origin.y
        }
    }
    
    var width :CGFloat {
        set{
            var newframe = frame
            newframe.size.width = newValue
            frame = newframe
        }
        get{
            frame.size.width
        }
    }
    
    var height :CGFloat {
        set{
            var newframe = frame
            newframe.size.height = newValue
            frame = newframe
        }
        get{
            frame.size.height
        }
    }
    
    var top :CGFloat {
        y
    }
    
    var bottom :CGFloat {
        y + height
    }
    
    var leading :CGFloat {
        x
    }
    
    var trailing :CGFloat {
        x + width
    }
    
    func setRadius(_ radius:CGFloat, _ width:CGFloat = 0.0, _ color: UIColor = UIColor.clear){
        layer.cornerRadius = radius
        layer.masksToBounds = true
        
        layer.borderWidth = width
        layer.borderColor = color.cgColor
    }
    
    
    func setPortionRadius(_ rectCorner:UIRectCorner) -> (CGFloat) -> () {
        { radius in
            
            let maskPath = UIBezierPath(roundedRect: self.bounds,
            byRoundingCorners: rectCorner, cornerRadii:CGSize(width:radius, height:radius))
            let masklayer = CAShapeLayer()
            masklayer.frame = self.bounds
            masklayer.path = maskPath.cgPath
            self.layer.mask = masklayer
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读