Просмотр домашнего экрана в приложении iOS (Swift)

Как я могу сделать фон UIView полупрозрачным, чтобы пользователь мог видеть свой (размытый) домашний экран?

Если это невозможно, возможно, я могу сделать скриншот главного экрана и добавить эффект полупрозрачности. Как в таком случае сделать снимок экрана домашнего экрана пользователя?

У Apple строгие взгляды на конфиденциальность (которые я поддерживаю), поэтому я понимаю, что ничего из вышеперечисленного не может быть разрешено.


person Benj    schedule 28.04.2019    source источник
comment
я отвечу на ваш первый вопрос и скажу, что это не работает после iOS 7   -  person Vollan    schedule 28.04.2019


Ответы (1)


1. Чтобы иметь фон предыдущего UIViewController, представьте следующий контроллер с PresentationStyle как overFullScreen.

let vc = ViewController()
vc.modalPresentationStyle = .overFullScreen
self.present(vc, animated: true, completion: nil)

Если нужно использовать полупрозрачный эффект,

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)

2. Сделать скриншот.

func takeScreenshot(view: UIView) -> UIImageView {
     UIGraphicsBeginImageContext(view.frame.size)
     view.layer.render(in: UIGraphicsGetCurrentContext()!)
     let image = UIGraphicsGetImageFromCurrentImageContext()
     UIGraphicsEndImageContext()
     UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
     return UIImageView(image: image)   
}

let view = HomeScreen().view
let image = taketakeScreenshot(view)
person Harsh Surati    schedule 28.04.2019
comment
Спасибо за отличный ответ! Однако Xcode говорит мне Use of unresolved identifier 'HomeScreen'. Существуют ли особые условия для использования HomeScreen() или это вообще устарело? - person Benj; 30.04.2019
comment
@Benj, HomeScreen - это класс, скриншот которого я хочу. Вы можете заменить его любым классом или прямым UIView. Извините за поздний ответ. - person Harsh Surati; 03.07.2019
comment
Ок, извини! Я думал, что HomeScreen это официальный API. - person Benj; 03.07.2019