问题
如果用纯代码写iOS 的UI,往往不能一次达到效果,不断的修改UI代码不可避免,特别是射鸡狮们死亡缠绕的时候,改一行代码运行一下,等几分钟,看下效果,然后重复n次这个动作。编译过程在上述过程中十分耗时,而安卓前端等都是修改完之后立刻能看到效果,所以相同水平的iOS开发效率比安卓慢不少。
思路
1、用xib和sb
这种方案能满足大部分需求,但是动态改变UI时就没那么好用。而且sb在多人开发时的维护成本比较高,所以笔者没有采用这种方案
2、InjectionIII
InjectionIII 是github上的一个开源项目,通过运行时替换代码达到动态刷新UI的目的
解决方案
步骤
1、 App Stroe 中下载 InjectionIII
2、在项目AppDelegate中的didFinishLaunchingWithOptions方法中添加加载代码
#if DEBUG
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle")?.load()
#endif
3、给UIViewController 和 UIView 添加@objc injected 方法,在UIViewController与UIView中点击刷新会走该方法,通过删除重新加载子控件达到刷新目的
import Foundation
import UIKit
extension UIViewController {
#if DEBUG
@objc open func injected() {
print("injected UIViewController")
for subview in view.subviews {
subview.removeFromSuperview()
}
viewDidLoad()
}
#endif
}
extension UIView {
#if DEBUG
@objc open func injected() {
print("injected UIView")
//find now VC
guard let nowVC = UIApplication.shared.keyWindow?.rootViewController else {
return
}
for subV in nowVC.view.subviews {
subV.removeFromSuperview()
}
nowVC.viewDidLoad()
}
#endif
}
4、打开 InjectionIII, 选中自己的项目
5、动态修改 viewDidLoad的中的代码,点击
command
+ s
查看效果
效果图
项目github地址
swift4 以上 : InjectionIII
oc 及 swift4 以下: injectionforxcode
网友评论