В некоторых ситуациях пользователям 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)
Поделитесь своим местоположением

      iTunes не синхронизирует программы
      iTunes не синхронизирует программы

      Ситуация: вы подключили свой iPad или iPhone к компьютеру с помощью кабеля. Программа iTunes запустилась сама, или вы ее принудительно запустили, но функция синхронизации приложений (программ) не активна! :( Выражается это в невозможности установить/убрать галочку на Синхронизации приложений - вся станица "Программы" выглядит не активной.




      Установка расширения MQ для PHP – mqseries
      Установка расширения MQ для PHP – mqseries

      Чтобы работать с очередями IBM MQ с помощью PHP, необходимо установить библиотеку для PHP - mqseries. В настоящее время самая актуальная библиотека mqseries имеет версию 0.15.0 (beta) от 14 июля 2017. Предварительно необходимо установить IBM WebSphereMQ.   Исходные данные: - виртуальный сервер с установленной операционной системой Linux Debian 10 x64; - панель управления сервером ISP Manager Lite 5. - нативная...




      Как отменить проверку уникальности e-mail при регистрации на сайте
      Как отменить проверку уникальности e-mail при регистрации на сайте

      Во-первых, зачем это может понадобиться? Представьте ситуацию: корпоративные сайт со специфическими задачами, количество пользователей - до нескольких сотен человек. Регистрацию этих пользователей выполняет администратор сайта, самостоятельная регистрация на сайте специально отключена, чтобы отсечь чужих. Для того, чтобы администратору не нужно было создавать множество почтовых ящиков, на...




      Jeppesen Mobile FliteDeck версия  2.0
      Jeppesen Mobile FliteDeck версия 2.0

      Сегодня ночью (по Московскому времени, когда в американском Денвере в это время был солнечный день) фирма Jeppesen представила на всеобщее обозрение видеоролик с анонсом новой версии программы Jeppesen Mobile FliteDeck - v2. К сожалению пока не раскрывается дата, когда можно будет вживую протестировать эту программу. Действующая версия программы Jeppesen Mobile FliteDeck, существующая с прошлого года на данный...




      Аналоги phpMyAdmin
      Аналоги phpMyAdmin

      PHPMyAdmin - это веб-интерфейс для администрирования СУБД MySQL, который позволяет через браузер администрировать ваши БД, запускать различные команды SQL, просматривать содержимое таблиц и баз данных, редактировать их и создавать новые. Многие web-разработчики пользуются PHPMyAdmin, соответственно, многие хостеры обязательно включают PHPMyAdmin в сборку при установке сервера. PHPMyAdmin имеет...




      Swift - как сделать скриншот одной кнопкой
      Swift - как сделать скриншот одной кнопкой

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




      Как отключить стандартную оболочку в навигаторе EXPLAY PN-355
      Как отключить стандартную оболочку в навигаторе EXPLAY PN-355

      Все автомобильные GPS-навигаторы имеют меню с достаточного размера кнопками на сенсорном экране для выстрого запуска необходимых приложений, в первую очередь - программы для непосредственной навигации. Многие современные навигаторы имеют возможность менять путь к навигационной программе. Поэтому при установке альтернативного ПО есть возможность безболезненно через настройки меню задать временно или...



Яндекс.Метрика
Сайт работает на быстром VPS/VDS хостинге от FASTVPS