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

      Как быстро удалить все фото и видео с iPhone
      Как быстро удалить все фото и видео с iPhone

      Устройства iPhone и iPad имеют довольно серьёзный недостаток - отсутствие нормального человеческого доступа к файловой системе устройства. По этой причине пользователям очень неудобно загружать различные файлы на мобильные устройства с компьютера и наоборот. Последние модели iPhone имеют очень крутые фотокамеры, позволяющие за несколько секунд делать потрясающие снимки (да, об этом никто даже не...




      Служба спасения 911 - Рождественский кошмар
      Служба спасения 911 - Рождественский кошмар

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




      Обновление навигационных баз данных навигатора Garmin GPS Map 495
      Обновление навигационных баз данных навигатора Garmin GPS Map 495

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




      Глюки iPad. Экран сам работает
      Глюки iPad. Экран сам работает

      Новый планшет iPad mini, купленный в Америке, почти сразу при эксплуатации начал себя плохо вести - периодически он жил своей жизнью: менял масштаб экрана, запускал приложения, переходил по ссылкам в браузере, набирал текст на виртуальной клавиатуре... Его владелец - любитель мистики и эзотерики - относил этот глюк к вмешательству потусторонних сил, как, помните, в фильме Джерри Цукера...




      Как учить авиационный английский
      Как учить авиационный английский

      Кому-то иностранные языки даются легко, кому-то не очень. Но мировая тенденция популяризации английского языка наблюдается уже довольно давно. Англичане по идее должны гордиться, что их язык выбран в качестве основного иностранного языка, который изучают по умолчанию. Не смотря на то, что официальными языками ИКАО являются в том числе и немецкий, французский и даже русский языки и другие..., фразеология...




      Перепрошивка навигаторов Garmin
      Перепрошивка навигаторов Garmin

      Несколько раз в сети попадалась информация по перепрошивке GPS-навигаторов Garmin. В том числе и про превращение бытового навигатора Garmin 276 (и его модификаций) в полноценный авиационный навигатор Garmin 296. Не зря говорят, что "Голь на выдумку хитра!", и многие пытаются сэкономить на приобретении полноценного прибора. По неофициальной информации элементная база Garmin 276 и 296 одна и та же....




      Статистика использования различных версий iOS
      Статистика использования различных версий iOS

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



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