В некоторых ситуациях пользователям iPhone или iPad может быть не удобно задействовать две руки, чтобы сделать скриншот экрана во время использования приложения, и они были бы счастливы делать это с помощью нажатия на одну кнопку - прямо в интерфейсе приложения.

Swift - как сделать скриншот одной кнопкойНа самом деле ни разу даже не возникало такой мысли - делать скриншот экрана iPhone с помощью одной кнопки в интерфейсе приложения, пока один товарищ не рассказал, что есть категория пользователей устройств Apple "старой закалки", которым не удобно растопыривать пальцы и задейстывовать две руки для сохранения изображения экрана.




Чтобы сделать скриншот одной кнопкой, нужно в xCode: 

1. В файле info.plist добавить ключ "Privacy - Photo Library Additions Usage Description" и указать в его значении, для чего приложению нужен доступ к фотогаллерее. Например, честно написать: "App XXX need to save screenshots to your gallery only" (Приложение ХХХ будет только созранять скриншоты в вашу галерею).

 

2. Добавить в нужный ViewController расширение для создание скриншота:

 

extension UIView {

    func takeScreenshot() -> UIImage {

        UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)

        drawHierarchy(in: self.bounds, afterScreenUpdates: true)

        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        if image != nil {

            return image!

        }

        return UIImage()

    }

}

 

3. Добавить в нужный ViewController кнопку:

   

@IBAction func makeScreenshot(_ sender: UIButton) {

        

        var image:UIImage = UIImage()

        let screenshot = self.view.takeScreenshot()

        image = screenshot

        

        // сохраняем скриншот в галерею:

        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

    }

  

Как при создании скриншота воспроизвести системный звук?

Для звукового уведомления пользователей, что скриншот был сделан можно добавить воспроизведение системного звука CameraShutter (звук затвора камеры), не смотря на то, что у iPhone и iPad затвор не механический в принципе.

 

1. Добавить импорт фреймворка AVFoundation:

 

import AVFoundation

 

 

2. Добавить внутрь кода @IBAction (нажатие кнопки для создания скриншота) в конец следующий код:

 

        let systemSoundID: SystemSoundID = 1108

        AudioServicesPlaySystemSound (systemSoundID)

 

Системный звук с кодом 1108 - это звук затвора фотокамеры (CameraShutter).

 




 

 

Все системные звуки:

SystemSoundIDFile nameCategory
1000 new-mail.caf MailReceived
1001 mail-sent.caf MailSent
1002 Voicemail.caf VoicemailReceived
1003 ReceivedMessage.caf SMSReceived
1004 SentMessage.caf SMSSent
1005 alarm.caf CalendarAlert
1006 low_power.caf LowPower
1007 sms-received1.caf SMSReceived_Alert
1008 sms-received2.caf SMSReceived_Alert
1009 sms-received3.caf SMSReceived_Alert
1010 sms-received4.caf SMSReceived_Alert
1011 - SMSReceived_Vibrate
1012 sms-received1.caf SMSReceived_Alert
1013 sms-received5.caf SMSReceived_Alert
1014 sms-received6.caf SMSReceived_Alert
1015 Voicemail.caf -
1016 tweet_sent.caf SMSSent
1020 Anticipate.caf SMSReceived_Alert
1021 Bloom.caf SMSReceived_Alert
1022 Calypso.caf SMSReceived_Alert
1023 Choo_Choo.caf SMSReceived_Alert
1024 Descent.caf SMSReceived_Alert
1025 Fanfare.caf SMSReceived_Alert
1026 Ladder.caf SMSReceived_Alert
1027 Minuet.caf SMSReceived_Alert
1028 News_Flash.caf SMSReceived_Alert
1029 Noir.caf SMSReceived_Alert
1030 Sherwood_Forest.caf SMSReceived_Alert
1031 Spell.caf SMSReceived_Alert
1032 Suspense.caf SMSReceived_Alert
1033 Telegraph.caf SMSReceived_Alert
1034 Tiptoes.caf SMSReceived_Alert
1035 Typewriters.caf SMSReceived_Alert
1036 Update.caf SMSReceived_Alert
1050 ussd.caf USSDAlert
1051 SIMToolkitCallDropped.caf SIMToolkitTone
1052 SIMToolkitGeneralBeep.caf SIMToolkitTone
1053 SIMToolkitNegativeACK.caf SIMToolkitTone
1054 SIMToolkitPositiveACK.caf SIMToolkitTone
1055 SIMToolkitSMS.caf SIMToolkitTone
1057 Tink.caf PINKeyPressed
1070 ct-busy.caf AudioToneBusy
1071 ct-congestion.caf AudioToneCongestion
1072 ct-path-ack.caf AudioTonePathAcknowledge
1073 ct-error.caf AudioToneError
1074 ct-call-waiting.caf AudioToneCallWaiting
1075 ct-keytone2.caf AudioToneKey2
1100 lock.caf ScreenLocked
1101 unlock.caf ScreenUnlocked
1102 - FailedUnlock
1103 Tink.caf KeyPressed
1104 Tock.caf KeyPressed
1105 Tock.caf KeyPressed
1106 beep-beep.caf ConnectedToPower
1107 RingerChanged.caf RingerSwitchIndication
1108 photoShutter.caf CameraShutter
1109 shake.caf ShakeToShuffle
1110 jbl_begin.caf JBL_Begin
1111 jbl_confirm.caf JBL_Confirm
1112 jbl_cancel.caf JBL_Cancel
1113 begin_record.caf BeginRecording
1114 end_record.caf EndRecording
1115 jbl_ambiguous.caf JBL_Ambiguous
1116 jbl_no_match.caf JBL_NoMatch
1117 begin_video_record.caf BeginVideoRecording
1118 end_video_record.caf EndVideoRecording
1150 vc~invitation-accepted.caf VCInvitationAccepted
1151 vc~ringing.caf VCRinging
1152 vc~ended.caf VCEnded
1153 ct-call-waiting.caf VCCallWaiting
1154 vc~ringing.caf VCCallUpgrade
1200 dtmf-0.caf TouchTone
1201 dtmf-1.caf TouchTone
1202 dtmf-2.caf TouchTone
1203 dtmf-3.caf TouchTone
1204 dtmf-4.caf TouchTone
1205 dtmf-5.caf TouchTone
1206 dtmf-6.caf TouchTone
1207 dtmf-7.caf TouchTone
1208 dtmf-8.caf TouchTone
1209 dtmf-9.caf TouchTone
1210 dtmf-star.caf TouchTone
1211 dtmf-pound.caf TouchTone
1254 long_low_short_high.caf Headset_StartCall
1255 short_double_high.caf Headset_Redial
1256 short_low_high.caf Headset_AnswerCall
1257 short_double_low.caf Headset_EndCall
1258 short_double_low.caf Headset_CallWaitingActions
1259 middle_9_short_double_low.caf Headset_TransitionEnd
1300 Voicemail.caf SystemSoundPreview
1301 ReceivedMessage.caf SystemSoundPreview
1302 new-mail.caf SystemSoundPreview
1303 mail-sent.caf SystemSoundPreview
1304 alarm.caf SystemSoundPreview
1305 lock.caf SystemSoundPreview
1306 Tock.caf KeyPressClickPreview
1307 sms-received1.caf SMSReceived_Selection
1308 sms-received2.caf SMSReceived_Selection
1309 sms-received3.caf SMSReceived_Selection
1310 sms-received4.caf SMSReceived_Selection
1311 - SMSReceived_Vibrate
1312 sms-received1.caf SMSReceived_Selection
1313 sms-received5.caf SMSReceived_Selection
1314 sms-received6.caf SMSReceived_Selection
1315 Voicemail.caf SystemSoundPreview
1320 Anticipate.caf SMSReceived_Selection
1321 Bloom.caf SMSReceived_Selection
1322 Calypso.caf SMSReceived_Selection
1323 Choo_Choo.caf SMSReceived_Selection
1324 Descent.caf SMSReceived_Selection
1325 Fanfare.caf SMSReceived_Selection
1326 Ladder.caf SMSReceived_Selection
1327 Minuet.caf SMSReceived_Selection
1328 News_Flash.caf SMSReceived_Selection
1329 Noir.caf SMSReceived_Selection
1330 Sherwood_Forest.caf SMSReceived_Selection
1331 Spell.caf SMSReceived_Selection
1332 Suspense.caf SMSReceived_Selection
1333 Telegraph.caf SMSReceived_Selection
1334 Tiptoes.caf SMSReceived_Selection
1335 Typewriters.caf SMSReceived_Selection
1336 Update.caf SMSReceived_Selection
1350 - RingerVibeChanged
1351 - SilentVibeChanged
4095 - Vibrate

 

Комментарии (1)

This comment was minimized by the moderator on the site

Можно еще и вибрацию добавить

Здесь не опубликовано еще ни одного комментария

Оставьте свой комментарий

  1. Опубликовать комментарий как Гость.
0 Значки
Вложения (0 / 3)
Поделитесь своим местоположением

      Изучайте английский..., или о пользе нестандартного мышления
      Изучайте английский..., или о пользе нестандартного мышления

      Cвященнослужитель и австралийский пастух овец выступают соперниками в одной телевизионной викторине. После того, как были заданы все стандартные вопросы, результат - ничья. Тогда ведущий передачи задает последний решающий вопрос: оба участника должны придумать в течение 5-ти минут стихотворение, в котором бы прозвучало слово "Тимбукту" (для справки - это город в республике Мали, который в свое...




      Обновление навигационных баз данных с помощью iPhone
      Обновление навигационных баз данных с помощью iPhone

      Jeppesen создал JDM (Jeppesen Distribution Manager) для iOS и объявил о стратегическом альянсе с компанией Bad Elf, которая выпустила портативный аксессуар для загрузки /выгрузки данных – Bad Ef Wombat. Устройство Wombat представляет собой беспроводную систему передачи данных, а программа JDM (iOS) позволяет скачать обновления навигационных баз данных Jeppesen в iPad или в iPhone для...




      Методики определения эксплуатационных минимумов
      Методики определения эксплуатационных минимумов

      Каждый эксплуатант (авиакомпания) при выполнении полетов должен тем или иным способом определять эксплуатационные минимумы для взлета и захода на посадку для каждого аэродрома с учетом: наличия/отсутствия/работосопособности системы огней ВПП, функционирования наземных и бортовых навигационных средств, препятствий в районе аэродрома и минимума командира воздушного судна. Эксплуатационные минимумы...




      Отключить надпись «Это соединение не защищено...» в Firefox
      Отключить надпись «Это соединение не защищено...» в Firefox

      Некогда любимая многими рыжая лисичка по имени Mozilla Firefox в быстротечном процессе развития дообновлялась аж до версии № 52 и... в очередной раз слегка деградировала :( И теперь Firefox не только жрет оперативную память и отсылает куда-то отчеты по активности пользователей, но и по умолчанию отображает при попытке ввода паролей на сайтах страшную надпись: «Это соединение не защищено. Логины,...




      Сертификат iphone distribution ненадежен
      Сертификат iphone distribution ненадежен

      Ситуация: xCode v.10.xx, после импорта свежего сертификата и ключа iphone distribution в Keychain, в нем отображается красным цветом надпись:   Сертификат iphone distribution ненадежен    




      Сбербанк онлайн - дырка в приложении для iPad
      Сбербанк онлайн - дырка в приложении для iPad

      Многие клиенты сбербанка пользуются сервисом "Сбербанк онлайн" для управления своими финансами и платежами. У данного сервиса есть детище - приложение для iPad, имеющее похожее название - "Сбербанк ОнЛ@йн". В принципе, приложение "Сбербанк ОнЛ@йн" не плохое и довольно удобное. По сравнению с доступом через сайт к сервису "Сбербанк онлайн" гораздо проще реализована авторизация - нужно ввести только собственный пароль. Из...




      Литературный проект Этногенез
      Литературный проект Этногенез

      Литературный проект Этногенез заявил о себе в 2009 году первым произведением "Маруся", а дальше понеслось... Создатели проекта очень грамотно объединили под эгидой литературы реальные исторические события, фантастику, фэнтези и кучу чего-то еще. Проект очень быстро стал популярным, в 2011 году стал частично коммерческим, но, тем не менее, авторы не запрещают размещать копии текстов и аудиотреков на сторонних сайтах.



Яндекс.Метрика