안드로이드에서는 메인 activity를 종료하고 다시 호출하면 바로 재시작이 된다.
하지만 아이폰에서는 그렇게 할수가 없었다. 혹시나 하는 마음에 재시작 시키는 함수를 찾아봤지만 이 또한 없었다. 나의 구글링 실력이 부족해서 못찾은거일수도 있지만... 좌절하고 있는 순간...
정말 우연하게 방법을 알아냈다. 사실 실수로 코드를 잘못 넣었는데... 재시작이 되는것이다... 아! 실수로 찍은 로또나 될것이지.. 어쨋든 기분은 좋다. 불로소득같은 느낌이다.
방법은 진짜 간단하다.
AppDelegate 의 applicationWillEnterForeground 에서 exit(0)를 호출해주면 된다.
아마도 잠에서 깨어나기 직전에 종료를 해주면 깨어나는 작업이 중단되지 않고 계속 진행되면서 재시작되는 효과가 나오는것 같다.
단점은 내가 원하는 시점이 아니라 앱이 깨어나는 순간에서만 적용된다는 것이다.
하지만 이는 아주 유용하게 쓰일수 있다.
iOS 특성상 앱을 완전 종료하지 않고 임시로 백그라운드로 내렸다가 다시 불려오는 경우가 많다.
(폰 아래 버튼은 종료 버튼이 아니라 홈 버튼이기 때문에)
즉, 앱이 완전 종료되고 다시 실행되어야만 하는 경우 매우 기특하게 사용될수 있다.
다음은 1시간 동안 앱이 포어그라운드로 깨어나지 않았다면 새로 실행 시키는 코드이다.
참고하여 다양하게 사용하길 바란다.
class AppDelegate: UIResponder, UIApplicationDelegate {
let RESTART_TIME: TimeInterval = 3600
var mResignTime: TimeInterval?
func applicationWillResignActive(_ application: UIApplication) {
mResignTime = NSDate().timeIntervalSince1970
}
func applicationWillEnterForeground(_ application: UIApplication) {
if mResignTime != nil && NSDate().timeIntervalSince1970 - mResignTime! > RESTART_TIME {
exit(0)
}
}
}
아이폰X와 아이폰7 (11.2)에서 테스트 해보았다. 잘 돌아간다. 굳!
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
'개발 > ios' 카테고리의 다른 글
스레드에서 반복문으로 UI를 변경할때 주의할점 (0) | 2018.07.30 |
---|---|
UIEdgeInsets 없이 UILabel에 여백 넣기 (0) | 2018.05.08 |
UIView의 원 테두리가 얇거나 작아보일때... (0) | 2018.01.29 |
NSString을 마치 UILabel인 양 사용하기 (0) | 2017.11.20 |
UIButton 이미지를 손쉽게 정렬하자~ (0) | 2017.05.30 |