我试图捕捉内存泄漏,并在仪器工具中使用泄漏探查器保留周期。然而,每当我点击仪器中的“录制”按钮时,应用程序似乎会先启动然后崩溃。如果我从Xcode打开应用程序并将其传输到Instruments,则在单击
UIButton
. 如果我从模拟器打开应用程序,我可以得到第二个屏幕,但它也崩溃了。此外,应用程序不会显示任何内存泄漏图表,也不会崩溃正常使用。
这是事故日志;
异常类型:EXC_BAD_ACCESS(SIGSEGV)异常子类型:KERN_INVALID_ADDRESS at 0x0000000000000018 VM Region Info:0x18不是
在任何地区。以下区域之前的字节数:4377985000
区域类型开始-结束[VSIZE]PRT/MAX SHRMOD区域详细信息
开始时未使用的空间
--->
__文本0000000 104f2c000-0000000 104fbc000[576K]r-x/r-x SM=COW…ti-App Test]
终止信号:分段故障:11终止原因:
命名空间信号,代码0xb终止进程:exc处理程序[0]
筛选的系统日志:未找到
线程0名称:调度队列:com.apple.main-Thread线程0
崩溃:0 libswiftCore.dylib 0x000000010597b2b4
0x1058cc000+717492 1 libswiftCore.dylib
0x000000010598823c 0x1058cc000+770620 2 UIFoundation公司
0x000000018f01fbdc属性哈希+460 3基础
0x0000000185417edc hashProbe+72 4基础
0x0000000185417e7c-[NSConcreteHashTable获取项目:]+40 5
基金会0x000000018f01fd54
+[NSAttributeDictionary newWithDictionary:+136 6基础0x000000018542666c-[NSConcreteAttributedString
initWithString:属性:]+124 7我的应用程序测试
0x0000000104fbb894 0x104f2c000+587924 8我的应用程序测试
0x0000000104fba588 0x104f2c000+583048 9我的应用程序测试
0x0000000104fba494 0x104f2c000+582804 10车型年款应用程序测试
0x0000000104fb9964 0x104f2c000+579940 11我的应用程序测试
0x0000000104fb9830 0x104f2c000+579632 12车型年款应用程序测试
0x0000000104fcb608 0x104f2c000+652808 13车型年款应用程序测试
0x0000000104fccea4 0x104f2c000+659108 14我的应用程序测试
0x0000000104fcc50c 0x104f2c000+656652 15我的应用程序测试
0x0000000104fcc5a0 0x104f2c000+656800 16套件
0x000000018df36bfc-[UIViewController loadViewIfRequired]+1040 17
UIKit 0x000000018df367d4-[UIViewController
查看]+28 18我的应用程序测试0x0000000104f85b6c 0x104f2c000
+367468 19我的应用程序测试0x0000000104f85470 0x104f2c000+365680 20我的应用程序测试0x0000000104f85688 0x104f2c000+
366216 21 UIKit 0x000000018df6b20c
-[UIApplication sendAction:to:from:forEvent:+96 22 UIKit 0x000000018df6b18c-[uicontrolsendaction:to:forEvent:+80 23
UIKit 0x000000018df55f4c-[UIControl
_sendActionsForEvents:withEvent:+440 24 UIKit 0x000000018df6aa80-[UIControl触摸:withEvent:+576 25
UIKit 0x000000018df6a5a0-[UIWindow
_sendTouchesForEvent:+2544 26 UIKit 0x000000018df65a70-[UIWindow sendEvent:+3208 27 UIKit
0x000000018df37078-[UI应用程序发送事件:]+340 28 UIKit
0x000000018e876f98
dispatchPreprocessedEventFromEventQueue+2364调度预处理事件
29套件0x000000018e879408
__handleEventQueueInternal+4760 30 UIKit 0x000000018e872574\uuuu handleHIDEventFetcherDrain+152 31
核心基础0x0000000184ad0358
__CFRUNLOOP_正在调用_OUT_以执行_SOURCE0_函数
+24 32核心基础0x0000000184ad02d8\uu CFRunLoopDoSource0
+88 33 CoreFoundation 0x0000000184acfb60\u cfrunloopdosources 0+204 34 CoreFoundation 0x0000000184acd738\u CFRunLoopRun+1048 35 CoreFoundation
0x00000001849ee2d8 CFRunLoopRunSpecific+436 36图形服务
0x000000018687ff84 GSEventRunModal+100 37 UIKit
0x000000018df9a880 UIApplicationMain+208 38我的应用程序测试
0x0000000104f97854 0x104f2c000+440404 39 libdyld.dylib
0x000000018451256c启动+4
线程1:0 libsystem_kernel.dylib 0x0000000184641dbc
__workq_kernreturn+8 1 libsystem_pthread.dylib 0x0000000184753144_pthread_wqthread+1288 2
libsystem_pthread.dylib 0x0000000184752c30启动_wqthread+4
线程2:0 libsystem_pthread.dylib 0x0000000184752c2
开始线程+0
线程3名称:com.apple.uikit.eventfetch-Thread Thread 3:0
libsystem_kernel.dylib 0x0000000184620bc4马赫信息陷阱+8 1
libsystem_kernel.dylib 0x0000000184620a3c马赫数消息+72 2
核心基础0x0000000184acfce4
CFRunLoopServiceMachPort+196 3核心基础0x0000000184acd8b0\uu CFRunLoopRun+1424 4核心基础
0x00000001849ee2d8 CFRunLoopRunSpecific+436 5基础
0x00000001854166e4-[nsrunlop+50916(nsrunlop)
运行模式:早于日期:]+304 6基础
0x0000000185435afc-[NSRunLoop+178940(NSRunLoop)runUntilDate:]+
96 7 UIKit 0x000000018eae602c
-[UIEventFetcher threadMain]+136 8基础0x0000000185517860线程启动
+996 9年
libsystem_pthread.dylib 0x000000018475432c_pthread_body+308
10 libsystem_pthread.dylib 0x00000001847541f8 _pthread_body+
0 11 libsystem_pthread.dylib 0x0000000184752c38线程启动+
四
线程4:0 libsystem_pthread.dylib 0x0000000184752c2
开始线程+0
线程5名称:com.apple.nsurlconnectionload线程5:0
libsystem_kernel.dylib 0x0000000184620bc4马赫信息陷阱+8 1
libsystem_kernel.dylib 0x0000000184620a3c马赫数消息+72 2
核心基础0x0000000184acfce4
CFRunLoopServiceMachPort+196 3核心基础0x0000000184acd8b0\uu CFRunLoopRun+1424 4核心基础
0x00000001849ee2d8 CFRunLoopRunSpecific+436 5 CFNetwork
0x0000000185157b40+[NSURLConnection+715584(加载程序)
_resourceLoadLoop:+4046基础0x0000000185517860线程启动
+9967个
libsystem_pthread.dylib 0x000000018475432c_pthread_body+308
8 libsystem_pthread.dylib 0x00000001847541f8 _pthread_body+
0 9 libsystem_pthread.dylib 0x0000000184752c38线程启动+
四
线程0因ARM线程状态(64位)而崩溃:
x0:0x00000001c4227ac0 x1:0x000000018eca2db2 x2:0x000000016aecf908 x3:0x0000000000000000
x4:0x0000000000000000X5:0x0000000000000020 x6:0x0000000185426654 x7:0x0000000000000130
x8:0x0000000000000000 x9:0x0000000000000000 x10:0x0119490101194980 x11:0x0000000001194901 x12:0x0000000001194800
x13:0x0000000000000001 x14:0x0000000000000000 x15:
0x01194901011949c0 x16:0x0000000000000000x17:0x0000000105988228
x18:0x0000000000000000X19:0x00000001c4227ac0 x20:
0x00000001c4227ac0 x21:0x00000001B542100X22:0x00000001c0124f60
x23:0x0000000000000000 x24:0x00000001c0200730 x25:
0x0000000000000000x26:0x000000018eca3f46 x27:0x00000001b3bca000
x28:0x00000001c04578e0 fp:0x000000016aecf4f0 lr:
0x000000010598823c
sp:0x000000016aecf4e0 pc:0x000000010597b2b4 cpsr:0x20000000
我找了一个月,不确定是不是仪器故障。我检查了下面的职位;
Xcode Instruments: Leaks - App crashes on launch
Instruments crashing while using Leaks instrument
xcode instruments causing app crash
编辑:另一个崩溃日志。在这个程序中,我打开应用程序并将内存传输到Instruments工具,然后触摸一个UIView top打开一个新控制器。
日期/时间:2018-07-06 15:13:34.5980+0300发布时间:2018-07-06 15:13:19.6298+0300操作系统版本:iPhone操作系统11.0
(15A372)基带版本:2.00.01报告版本:104
异常类型:EXC_BAD_ACCESS(SIGSEGV)异常子类型:
KERN_无效的_地址位于0x0000000000000018虚拟机区域信息:0x18不是
在任何地区。以下区域之前的字节数:4330094568
区域类型开始-结束[VSIZE]PRT/MAX SHRMOD区域详细信息
开始时未使用的空间
--->
__文本0000000 102180000-0000000 102240000[1152K]r-x/r-x SM=COW…ti-Filo测试]
终止信号:分段故障:11终止原因:
命名空间信号,代码0xb终止进程:exc处理程序[0]
由线程触发:0
筛选的系统日志:未找到
线程0名称:调度队列:com.apple.main-Thread线程0
崩溃:0 libswiftCore.dylib 0x0000000102bdf278
0x102b30000+717432 1 libswiftCore.dylib
0x0000000102bec1b0 0x102b30000+770480 2核心基础
0x0000000184a3ec80-[NSDictionary allKeys]+108 3个UIKit
0x000000018e15738c-[NSDictionary+2294668
(UIStringDrawingKeyCompatibility)
_用户界面属性包含正在绘制的绘图键]+36 4用户界面工具包0x000000018e09fde0-[UINavigationBar
setTitleTextAttributes:]+144 5我的应用程序测试
0x00000001021e82e8 0x102180000+426728 6我的应用程序测试
0x00000001021e67c8 0x102180000+419784 7我的应用程序测试
0x00000001021e6a14 0x102180000+420372 8套件
0x000000018e5c3f78-[UIGestureRecognizerTarget目标
_sendActionWithGestureRecognizer:]+64 9单元UIKit 0x000000018e5c84dc单元UIGestureRecognizerSendTargetActions+124 10
UIKit 0x000000018e0b2dc8
_UIGestureRecognizerSendActions+320 11 UIKit 0x000000018df67748-[UIGestureRecognizer识别器
_更新文件:buttonEvent:+732 12 UIKit 0x000000018e5b23fc UIGestureEnvironmentUpdate+1056 13 UIKit
0x000000018e5b1f88-[UIGestureEnvironment(环境)
_deliverEvent:ToGetRestureRecognizers:usingBlock:+404 14 UIKit 0x000000018e5b10e4-[UIGestureEnvironment
_updateGesturesForEvent:窗口:]+276 15 UIKit 0x000000018df65a54-[UIWindow发送事件:]+3180 16 UIKit
0x000000018df37078-[UI应用程序发送事件:]+340 17 UIKit
0x000000018e876f98
dispatchPreprocessedEventFromEventQueue+2364调度预处理事件
18工具包0x000000018e879408
__handleEventQueueInternal+4760 19 UIKit 0x000000018e872574\uuuu handleHIDEventFetcherDrain+152 20
核心基础0x0000000184ad0358
__CFRUNLOOP_正在调用_OUT_以执行_SOURCE0_函数
+24 21 CoreFoundation 0x0000000184ad02d8\uu CFRunLoopDoSource0
+88 22核心基础0x0000000184acfb60\uu cfrunloopdosources 0+204 23核心基础0x0000000184acd738\uu CFRunLoopRun+1048 24核心基础
0x00000001849ee2d8 CFRunLoopRunSpecific+436 25图形服务
0x000000018687ff84 GSEventRunModal+100 26 UIKit
0x000000018df9a880 UIApplicationMain+208 27我的应用程序测试
0x00000001021facdc 0x102180000+503004 28 libdyld.dylib
0x000000018451256c启动+4
线程1:0 libsystem_pthread.dylib 0x0000000184752c2
开始线程+0
线程2:0 libsystem_pthread.dylib 0x0000000184752c2
开始线程+0
线程3:0 libsystem_pthread.dylib 0x0000000184752c2
开始线程+0
线程4名称:com.apple.uikit.eventfetch-Thread线程4:0
libsystem_kernel.dylib 0x0000000184620bc4马赫信息陷阱+8 1
libsystem_kernel.dylib 0x0000000184620a3c马赫数消息+72 2
核心基础0x0000000184acfce4
CFRunLoopServiceMachPort+196 3核心基础0x0000000184acd8b0\uu CFRunLoopRun+1424 4核心基础
0x00000001849ee2d8 CFRunLoopRunSpecific+436 5基础
0x00000001854166e4-[nsrunlop+50916(nsrunlop)
运行模式:早于日期:]+304 6基础
0x0000000185435afc-[NSRunLoop+178940(NSRunLoop)runUntilDate:]+
96 7 UIKit 0x000000018eae602c
-[UIEventFetcher threadMain]+136 8基础0x0000000185517860线程启动
+996 9年
libsystem_pthread.dylib 0x000000018475432c_pthread_body+308
10 libsystem_pthread.dylib 0x00000001847541f8 _pthread_body+
0 11 libsystem_pthread.dylib 0x0000000184752c38线程启动+
四
线程5名称:GAIThread线程5:0 libsystem_kernel.dylib
0x0000000184620bc4 mach_msg_trap+8 1 libsystem_kernel.dylib
0x0000000184620a3c马赫数消息+72 2核心基础
0x0000000184acfce4
CFRunLoopServiceMachPort+196 3个
CoreFoundation 0x0000000184acd8b0\u CFRunLoopRun+
1424 4核心基础0x00000001849ee2d8
CFRunLoopRunSpecific+4365基础
0x00000001854166e4-[nsrunlop+50916(nsrunlop)
运行模式:早于日期:]+304 6基础
0x000000018546862c-[nsrunlop+386604(nsrunlop)运行]+88 7车型年款
应用测试0x000000010225b108 0x102180000+897288 8
基础0x0000000185517860线程启动
+996 9 libsystem_pthread.dylib 0x000000018475432c _pthread_body+308 10 libsystem_pthread.dylib 0x00000001847541f8 _pthread_body+0 11 libsystem_pthread.dylib
0x0000000184752c38线程开始+4
线程6名称:com.apple.NSURLConnectionLoader线程6:0
libsystem_kernel.dylib 0x0000000184620bc4马赫信息陷阱+8 1
libsystem_kernel.dylib 0x0000000184620a3c马赫数消息+72 2
CoreFoundation 0x0000000184acfce4
CFRunLoopServiceMachPort+196 3核心基础0x0000000184acd8b0\uu CFRunLoopRun+1424 4核心基础
0x00000001849ee2d8 CFRunLoopRunSpecific+436 5 CFNetwork
0x0000000185157b40+[NSURLConnection+715584(加载程序)
_resourceLoadLoop:+4046基础0x0000000185517860线程启动
+9967个
libsystem_pthread.dylib 0x000000018475432c_pthread_body+308
8 libsystem_pthread.dylib 0x00000001847541f8 _pthread_body+
0 9 libsystem_pthread.dylib 0x0000000184752c38线程启动+
四
线程0因ARM线程状态(64位)而崩溃:
x0:0x00000001c427c60 x1:0x000000018eca2db2 x2:0x0000000000000000 x3:0x000000010637e8d0
x4:0x0000000000000002 x5:0x0000000000000020 x6:0x00000001021e82e8 x7:0x0000000000000b70
x8:0x0000000000000000 x9:0x0000000000000000 x10:0x01446b0101446b80 x11:0x0000000001446b01 x12:0x0000000001446a00
x13:0x0000000000000001 x14:0x0000000000000000 x15:
0x01446b0101446bc0 x16:0x0000000000000000x17:0x0000000102bec19c
x18:0x0000000000000000 x19:0x00000001c4227c60 x20:
0x00000001c4227c60 x21:0x00000001c4227c60 x22:0x00000000000000d0
x23:0x00000000000001f0 x24:0x0000000000000008 x25:
0x00000001c4107740 x26:0x00000001c40ca6b0 x27:0x00000001c4093330
x28:0x00000001b3f8f000 fp:0x000000016dc7ce40 lr:
0x0000000102bec1b0
sp:0x000000016dc7ce30 pc:0x0000000102bdf278 cpsr:0x20000000
编辑:
在“弗兰蒂克洛克”的回答之后。当我删除时
[UINavigationBar setTitleTextAttributes:]
detail类可以打开,但不显示任何项(title、back按钮或任何单元格)。它们都是空的,我还在漏水。
这是我编写的控制器类
[UINavigationBar setTitleTextAttributes:]
class WelcomeViewController: BaseViewController {
let bgView = UIView()
let backgroundImage = UIImageView()
let logoImage: UIImageView = {
let i = UIImageView()
i.image = UIImage(named: "full_logo")
i.contentMode = .scaleAspectFit
return i
}()
let welcomeLabel : UILabel = {
let l = UILabel()
l.font = Fonts.font.withSize(24)
l.textColor = UIColor.white
l.textAlignment = .center
l.numberOfLines = 0
l.sizeToFit()
return l
}()
let loginLbl: UILabel = {
let l = UILabel()
l.font = Fonts.font.withSize(13)
l.textColor = UIColor.white
l.textAlignment = .center
l.numberOfLines = 0
l.sizeToFit()
return l
}()
let adminBtn: UIButton = {
let b = UIButton()
b.backgroundColor = Color.Common.buttonColor
b.layer.cornerRadius = 6.0
return b
}()
let userBtn: UIButton = {
let b = UIButton()
b.backgroundColor = Color.Common.buttonColor
b.layer.cornerRadius = 6.0
return b
}()
lazy var supportedServicesView = WelcomeScreenButtonView(text: getLabelText(key: CMSKeys.CMS_LBL_SUPPORTEDSERVICES), imageName: "phone")
lazy var incidentView = WelcomeScreenButtonView(text: getLabelText(key: CMSKeys.CMS_LBL_INCIDENT), imageName: "phone")
lazy var contactUsView = WelcomeScreenButtonView(text: getLabelText(key:CMSKeys.CMS_LBL_CONTACT), imageName: "phone")
lazy var moreView = WelcomeScreenButtonView(text: getLabelText(key:CMSKeys.CMS_LBL_MORE), imageName: "wdiger")
lazy var emergencyBtn = SendButton(text: "Button")
let firstStackView = UIStackView()
let secondStackView = UIStackView()
let thirdStackView = UIStackView()
let btnStackView = UIStackView()
override func viewDidLoad() {
super.viewDidLoad()
self.setPageID()
designUI()
}
override func viewDidAppear(_ animated: Bool) {
if(AppContext.instance.comesFromURL != nil){
comesFromURL()
}
}
override func viewWillAppear(_ animated: Bool) {
if(analyticsName != nil){
self.sendDataToGA()
}
}
override func viewDidLayoutSubviews() {
bgView.anchor(self.thirdStackView.topAnchor, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, topConstant: 40, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
let margins = view.layoutMarginsGuide
thirdStackView.leadingAnchor.constraint(equalTo: margins.leadingAnchor,constant: 5).isActive = true
thirdStackView.trailingAnchor.constraint(equalTo: margins.trailingAnchor,constant: -5).isActive = true
thirdStackView.bottomAnchor.constraint(equalTo: self.emergencyBtn.topAnchor, constant: -10).isActive = true
thirdStackView.heightAnchor.constraint(equalTo: thirdStackView.widthAnchor, multiplier: 0.77).isActive = true
emergencyBtn.anchor(nil, left: self.view.leftAnchor, bottom: self.bottomLayoutGuide.topAnchor, right: self.view.rightAnchor, topConstant: 10, leftConstant: 20, bottomConstant: 20, rightConstant: 20, widthConstant: 0, heightConstant: 48)
if #available(iOS 11.0, *) {
logoImage.anchor(self.view.safeAreaLayoutGuide.topAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 40, leftConstant: 80, bottomConstant: 0, rightConstant: 80, widthConstant: 0, heightConstant: 0)
} else {
logoImage.anchor(self.view.topAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 40, leftConstant: 80, bottomConstant: 0, rightConstant: 80, widthConstant: 0, heightConstant: 0)
// Fallback on earlier versions
}
logoImage.anchorCenterXToSuperview()
let welcomeLblHeight = heightForView(text: "Welcome", font: welcomeLabel.font, width: self.view.bounds.width)
let loginLblHeight = heightForView(text: "Please Log In", font: loginLbl.font, width: self.view.bounds.width)
welcomeLabel.anchor(self.logoImage.bottomAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 0, leftConstant: 50, bottomConstant: 0, rightConstant: 50, widthConstant: 0, heightConstant: welcomeLblHeight)
loginLbl.anchor(self.welcomeLabel.bottomAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 10, leftConstant: 50, bottomConstant: 0, rightConstant: 50, widthConstant: 0, heightConstant: loginLblHeight)
btnStackView.anchor(nil, left: self.view.leftAnchor, bottom: self.thirdStackView.topAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 20, bottomConstant: 20, rightConstant: 20, widthConstant: 0, heightConstant: 50)
backgroundImage.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - self.bgView.frame.height)
}
private func designUI(){
self.view.translatesAutoresizingMaskIntoConstraints = true
backgroundImage.image = UIImage(named: "background.png")
backgroundImage.contentMode = .scaleAspectFill
self.view.insertSubview(backgroundImage, at: 0)
bgView.backgroundColor = Color.Common.welcomeScreenBackgroundColor
self.view.insertSubview(bgView, at: 1)
view.addSubview(logoImage)
welcomeLabel.text = getLabelText(key: CMSKeys.CMS_LBL_WELCOME)
view.addSubview(welcomeLabel)
loginLbl.text = getLabelText(key: CMSKeys.CMS_LBL_LOGIN)
view.addSubview(loginLbl)
adminBtn.backgroundColor = Color.Common.adminGreen
adminBtn.setTitle(getLabelText(key: CMSKeys.CMS_BTN_ADMIN), for: .normal)
adminBtn.addTarget(self, action: #selector(adminBtnTapped(_:)), for: .touchUpInside)
userBtn.backgroundColor = Color.Common.userGreen
userBtn.setTitle(getLabelText(key: CMSKeys.CMS_BTN_USER), for: .normal)
userBtn.addTarget(self, action: #selector(userBtnTapped(_:)), for: .touchUpInside)
btnStackView.axis = UILayoutConstraintAxis.horizontal
btnStackView.distribution = UIStackViewDistribution.fillEqually
btnStackView.alignment = UIStackViewAlignment.fill
btnStackView.spacing = 10.0
btnStackView.addArrangedSubview(adminBtn)
btnStackView.addArrangedSubview(userBtn)
btnStackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(btnStackView)
firstStackView.axis = UILayoutConstraintAxis.vertical
firstStackView.distribution = UIStackViewDistribution.fillEqually
firstStackView.alignment = UIStackViewAlignment.fill
firstStackView.spacing = 10.0
firstStackView.addArrangedSubview(supportedServicesView)
firstStackView.addArrangedSubview(contactUsView)
firstStackView.translatesAutoresizingMaskIntoConstraints = false
secondStackView.axis = UILayoutConstraintAxis.vertical
secondStackView.distribution = UIStackViewDistribution.fillEqually
secondStackView.alignment = UIStackViewAlignment.fill
secondStackView.spacing = 10.0
secondStackView.addArrangedSubview(incidentView)
secondStackView.addArrangedSubview(moreView)
secondStackView.translatesAutoresizingMaskIntoConstraints = false
thirdStackView.axis = UILayoutConstraintAxis.horizontal
thirdStackView.distribution = UIStackViewDistribution.fillEqually
thirdStackView.alignment = UIStackViewAlignment.fill
thirdStackView.spacing = 10.0
thirdStackView.addArrangedSubview(firstStackView)
thirdStackView.addArrangedSubview(secondStackView)
thirdStackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(thirdStackView)
//View Tap Gestures
let tapSupportedServices = UITapGestureRecognizer(target: self, action: #selector(self.tapSupportedServices(_:)))
supportedServicesView.addGestureRecognizer(tapSupportedServices)
supportedServicesView.isUserInteractionEnabled = true
let tapIncidentView = UITapGestureRecognizer(target: self, action: #selector(self.tapIncident(_:)))
incidentView.addGestureRecognizer(tapIncidentView)
incidentView.isUserInteractionEnabled = true
let tapContactUs = UITapGestureRecognizer(target: self, action: #selector(self.tapContactUs(_:)))
contactUsView.addGestureRecognizer(tapContactUs)
contactUsView.isUserInteractionEnabled = true
let tapMoreView = UITapGestureRecognizer(target: self, action: #selector(self.tapMore(_:)))
moreView.addGestureRecognizer(tapMoreView)
moreView.isUserInteractionEnabled = true
emergencyBtn.layer.cornerRadius = 6.0
emergencyBtn.addTarget(self, action: #selector(emergenyBtnTapped(_:)), for: .touchUpInside)
self.view.addSubview(emergencyBtn)
}
@objc func tapSupportedServices(_ sender: UITapGestureRecognizer) {
let linkingVC = SupportedServicesFirstViewController()
let controller = createNavController(title: "Services", viewController: linkingVC)
self.present(controller, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
//Gets a Title and a ViewController then returns a UINavigationController with attributes
private func createNavController(title: String, viewController: UIViewController) -> UINavigationController {
viewController.view.backgroundColor = UIColor(red:0.87, green:0.87, blue:0.87, alpha:1.0)
let navController = UINavigationController(rootViewController: viewController)
navController.navigationBar.topItem?.title = title
navController.navigationBar.barTintColor = Color.NavigationBar.tintColor
navController.navigationBar.tintColor = UIColor.white
//Fix: Leak
navController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: Color.NavigationBar.textColor]
return navController
}
private func removeViews(){
self.emergencyBtn.removeFromSuperview()
self.incidentView.removeFromSuperview()
self.moreView.removeFromSuperview()
self.supportedServicesView.removeFromSuperview()
self.contactUsView.removeFromSuperview()
}
deinit {
print("Welcome Deinited")
removeViews()
}
}