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
}
}
}