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

 


      Как создать корзину на флэшке
      Как создать корзину на флэшке

      Как известно, по умолчанию корзина Windows создается только на жестких дисках (HDD), на флэшках ее нет. Поэтому, случайно удалив что-нибудь на флешке, для восстановления приходится прибегать к помощи специальных реанимационных программ. Иногда, правда в результате воздействия вирусов на флэшках может появиться визуально похожий на Корзину объект, но это - не настоящая корзина, и в ней кроме вирусов...




      Программа для пересчета координат СК-42 - WGS-84
      Программа для пересчета координат СК-42 - WGS-84

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




      Специализированные DOZORные программы
      Специализированные DOZORные программы

      У каждой команды, которая играет в DOZOR должен быть штаб. Обычно штаб размещается в квартире или в доме одного из игроков команды, иногда на работе одного или нескольких игроков. Второе - сложнее, т.к. при этом надо быть в очень хороших отношениях с начальством или быть этим самым начальством! :) Помимо стандартного обеспечения компьютерами, Интернетом, кофе, чаем, пивом и другими необходимыми полезностями и...




      Dropbox и сто iPad'ов
      Dropbox и сто iPad'ов

      Исходные данные: Сто планшетов Apple iPad; Множество документов (~ 60 шт) разного размера (от 1 до 200 Мб), периодически обновляемых, каждый документ по своему регламенту. Необходимо обеспечить: Наличие всех этих документов в актуализированном состоянии в любой момент времени непосредственно на всех этих iPad'ах; Элементарную (хотя бы) защиту этих документов.




      Москва и Ульяновск. Разница во времени
      Москва и Ульяновск. Разница во времени

      Помню, что в 80-тых годах время в Ульяновске отличалось от московского на 1 час и соответствовало самарскому времени. Потом в 1989 году в Ульяновске сделали московское время. И все жили в унисон с Москвой, и было это удобно, в принципе. Но нашлись умники, которые стали ныть, что их утром по утрам солнце слишком рано будит, а вечером, якобы, темнеет слишком быстро, и надо это все срочно исправить в целях...




      Всплывающие подсказки для DRAW.io
      Всплывающие подсказки для DRAW.io

      Сложные диаграммы процессов или информационных систем невозможно нарисовать с использованием нескольких прямоугольников и стрелок между ними. Да, существует такое понятие как HLD (High Level Design - верхнеуровневое описание архитектуры системы, иногда High Level Diagram - верхнеуровневая диаграмма), которую можно декомпозировать на части и отобразить их в виде отдельных схем. Но иногда возможны ситуации,...




      Скопировать или переместить файлы из этой зоны?
      Скопировать или переместить файлы из этой зоны?

      Дано: компьютер с операционной системой Windows XP SP3 в корпоративной сети, построенной на Novell, несколько сетевых дисков, на которые даны права на запись/чтение. Встроенный браузер Internet Explorer - версии 7.... с чем-то. Неудобство: при копировании с/на любой сетевой диск проводник выдает сообщение: "Скопировать или переместить файлы из этой зоны?", в результате, пользователю каждый раз приходится дополнительно...



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