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

      HTTP-методы для RESTful-сервисов
      HTTP-методы для RESTful-сервисов

      Для HTTP-методов используются английские глаголы, которые определяют специфику их использования и ограничения. Основными или наиболее часто используемыми HTTP-методами являются POST, GET, PUT, PATCH и DELETE. Они соответствуют операциям CRUD (Create, Read, Update, Delete). Есть еще несколько других глаголов, например: HEAD, CONNECT, OPTIONS, TRACE, но они используются реже. Самые часто...




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

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




      root causes и edge case
      root causes и edge case

      Специфические термины - root causes и edge case. Попробуем разобраться с ними.




      Из аэропорта Франкфурт Майн в Раунхайм на электричке
      Из аэропорта Франкфурт Майн в Раунхайм на электричке

      Нужно было давеча попасть в небольшую немецкую деревушку - Раунхайм (Raunheim), расположенную не далеко от аэропорта Франкфурт Майн (EDDF/FRA). Расстояние от терминала вроде бы смешное - всего-то около 10 километров, но использовать такси - как-то не спортивно, пешком - не солидно, в результате было принято решение воспользоваться железнодорожным немецким транспортом. Железнодорожный транспорт в Германии очень...




      Как переустановить сетевой протокол TCP IP
      Как переустановить сетевой протокол TCP IP

      При установке в составе какой-нибудь сборки Windows иногда может некорректно установиться сетевой протокол TCP IP. В этом случае нужно его переустановить, и по-другому просто никак. Как же переустановить сетевой протокол TCP IP? - без небольших "танцев с бубном" этого не сделать.




      Признаки принадлежности аэродрома
      Признаки принадлежности аэродрома

      В некоторых авиационных справочниках (онлайн или установленных отдельных приложений) по аэродромам есть такой параметр - "Признак принадлежности аэродрома" ("aerodrom usage attribute"), который и определяет эту принадлежность.Помимо общеизвестных признаков принадлежности аэродрома - военные, гражданские и совместного базирования, существует еще несколько. Они малораспространены, но иногда...




      FliteStar/FliteMap для чайников
      FliteStar/FliteMap для чайников

      Наиподробнейший инструктивный материал по использованию программ FliteStar/FliteMap. Программы "Flite Star" и "Flite Map" отличаются друг от друга наличием у "Flite Map" движущейся карты при подключении к ней GPS, что позволяет повысить удобство использования ее в полете. Без подключения GPS порядок работы с обеими программами полностью идентичен. В данных методических рекомендациях рассматривается вопрос...



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