1.Private/FilePrivate/Public/Open 的作用和区别
FilePrivate,Open是在swift3.0之后加进去的,其实就是对swift中数据的四种修饰符的访问权限。
权限从高到低为: open > public > fileprivate > private
Private
只允许在当前类中调用,不包括 Extension
private 现在变为了真正的私有访问控制
用 private 修饰的方法不可以被代码域之外的地方访问
fileprivate
fileprivate 其实就是过去的 private。
其修饰的属性或者方法只能在当前的 Swift 源文件里可以访问。
即在同一个文件中,所有的 fileprivate 方法属性都是可以访问到的。
class PermissionObj: NSObject {
private func test() {
print("private method")
}
fileprivate func test1() {
print("fileprivate method")
}
public func test2() {
print("public method")
}
open func test3() {
print("open method")
}
}
class SubPermissionObj: PermissionObj {
func subMethod() -> Void {
test1()
test2()
test3()
}
override func test1() {
oneMethod()
}
override func test2() {
}
}
extension PermissionObj {
fileprivate func oneMethod() {
}
}
Public
可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。
Open
可以被任何人使用,包括override和继承。
2.去掉UITabBar控件上的横线
class func hideTabbarLine(tabBar: UITabBar) -> Void {
let rect: CGRect = CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: 49)
UIGraphicsBeginImageContext(rect.size)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.setFillColor(UIColor.clear.cgColor)
context.fill(rect)
let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
tabBar.backgroundImage = img
tabBar.shadowImage = img
}
当然这里面还用到了 用代码绘制纯色图片的功能
class func imageWithRect(rect: CGRect, color: UIColor) -> UIImage {
UIGraphicsBeginImageContext(rect.size)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
UINavigationBar上的横线的隐藏
class func hideNaviViewLine(view: UIView) {
if (view.isKind(of: UIImageView.self) && view.height <= 1.0) {
view.isHidden = true
return;
}
for subView in view.subviews {
self.hideNaviViewLine(view: subView)
}
}
设置NavigationController中控制器开启全屏返回上个界面的操作
class BaseNavigation: UINavigationController, UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.openFullScreenGes()
}
func openFullScreenGes() -> Void {
let target = self.interactivePopGestureRecognizer?.delegate
let handler = NSSelectorFromString("handleNavigationTransition:")
let targetView = self.interactivePopGestureRecognizer?.view
let fullScreenGes = UIPanGestureRecognizer.init(target: target, action: handler)
fullScreenGes.delegate = self
targetView?.addGestureRecognizer(fullScreenGes)
self.interactivePopGestureRecognizer?.isEnabled = false
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if self.childViewControllers.count == 1 {
return false
}else {
return true
}
}
}
设置UINavigationBar导航栏为透明
class func customizeTranslucentNavigationBar(naviBar: UINavigationBar) -> Void {
naviBar.titleTextAttributes = [kCTForegroundColorAttributeName:UIColor.white] as [NSAttributedStringKey : Any]
naviBar.tintColor = UIColor.purple
naviBar.isTranslucent = true
naviBar.setBackgroundImage(UIImage(), for: .default)
naviBar.shadowImage = UIImage()
}
网友评论