Swift 4
/// Takes the screenshot of the screen and returns the corresponding image
///
/// - Parameter shouldSave: Boolean flag asking if the image needs to be saved to user's photo library. Default set to 'true'
/// - Returns: (Optional)image captured as a screenshot
open func takeScreenshot(_ shouldSave: Bool = true) -> UIImage? {
var screenshotImage :UIImage?
let layer = UIApplication.shared.keyWindow!.layer
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
guard let context = UIGraphicsGetCurrentContext() else {return nil}
layer.render(in:context)
screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if let image = screenshotImage, shouldSave {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
return screenshotImage
}
Обновлено для Swift 2
Код, который вы предоставляете, работает, но не позволяет вы должны захватить NavigationBar
и StatusBar
на снимке экрана. Если вы хотите сделать снимок экрана вашего устройства, который будет включать в себя NavigationBar
, вы должны использовать следующий код:
func screenShotMethod() {
let layer = UIApplication.sharedApplication().keyWindow!.layer
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
}
С помощью этого кода:
StatusBar
не будет отображаться. Я честно должен сказать, что в течение моих лет.NET (C#) программирование у меня нет дефектов в дизайне платформы, который я помнил; Означать, что в моем случае нет, вероятно, никаких дефектов, которые стоит помнить.
Однако существует что-то, что мне не понравились несколько лет назад, когда Microsoft выпускала XNA, они полностью сокращение их MDX, с 2.0 версиями, который сделал мои игры неиграемыми и не легкий просто преобразовать. Это - более широкий дефект и не имеет никакого отношения к платформе.NET.
платформа.NET на самом деле следует большому количеству Очень Хорошего руководства по проектированию, разработанного большой архитектурой языка высокого класса. Таким образом, я должен сказать, что я доволен.NET.
, Но сказать Вам что-то, что могло быть лучше, я должен буду жаловаться на Универсальную систему, я не нахожу Дженерики для Интерфейсов таким как, "где T является MyObj" (это не абсолютно правильный синтаксис. Однако эта часть, возможно, была сделана намного лучше и более ясной.
Предполагают иметь Интерфейс, который совместно используют 2 различных класса, если Вы хотите Общий метод в том интерфейсе, необходимо пробежаться через некоторые противные Дженерики-sytanx. Это мог бы просто быть я желающий сделать странный материал. Только незабываемая вещь для меня все же.