В некоторых ситуациях пользователям iPhone или iPad может быть не удобно задействовать две руки, чтобы сделать скриншот экрана во время использования приложения, и они были бы счастливы делать это с помощью нажатия на одну кнопку - прямо в интерфейсе приложения.
На самом деле ни разу даже не возникало такой мысли - делать скриншот экрана iPhone с помощью одной кнопки в интерфейсе приложения, пока один товарищ не рассказал, что есть категория пользователей устройств Apple "старой закалки", которым не удобно растопыривать пальцы и задейстывовать две руки для сохранения изображения экрана.
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).
SystemSoundID | File name | Category |
---|---|---|
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 |
С 12.ххх какой-то версии в программе iTunes был упразднен функционал работы с ipa-файлами, и iTunes стал всего лишь убогим медиа-плейером... :( Если раньше пользователи могли с помощью iTunes устанавливать и удалять приложения на свои устройства, сохранять ipa-файлы (через медиатеку iTunes), а также управлять контентом этих приложений (загружать и удалять файлы в приложениях), то теперь такая возможность...
2003 год, Краснодарский край, город Ейск, военные сборы гр. 51/98 УВАУ ГА Приближалось лето!!! Одна из туристических фирм города Ульяновска предложила нам прекрасно провести время на курорте Краснодарского края - в солнечном городе Ейске. Посоветовавшись группой, мы решили приобрести путёвки...
Планшеты iPad имеют усовершенствованный литий-полимерный аккумулятор, который обеспечивает до десяти часов работы*. Кроме требования длительного времени функционирования аккумулятор для iPad батарей был разработан в соответствии с международными стандартами техники безопасности.
Авиакомпания Monarch Airlines (Великобритания) выбрала программу производства фирмы Flightman для использования в своих Electronic Flight Bag (EFB) , чтобы обеспечить летные экипажи аэронавигационной информацией в рамках повышения эффективности работы и снижения затрат. В июле 2011 года авиакомпания Monarch Airlines подтвердила, что она будет устанавливать комплекс программного обеспечения от Flightman в свои EFB для всего их парка воздушных судов. Авиакомпания Monarch Airlines изначально использовала в...
Аналогично программе для получения выборки из БД в формате ARINC-424 по коду раздела (5 колонка) и коду подраздела (6 или 13 колонка), данная программа позволяет делать более сложные выборки - с учетом значений любых столбцов базы данных. Программа позволяет сделать любую выборку по заданным пользователем параметрам, точнее по значениям, введенным в любой столбец - хоть во все 132. В приведенном примере сделана выборка из БД -...
В настоящее время имеется большое разнообразие программ для навигации: Mapsme, Яндекс.Навигатор, Sygic, Навител, Copilot, Magic Earth, iGo, TomTom Go и множество других приложений. Наиболее популярные версии - для iOS и для Android, для других платформ (например, Windows) не каждый производитель делает приложение. Разные пользователи выбирают и используют различные приложения для навигации - кому какие...
11 сентября 2001 года два гражданских самолета врезались в башни Всемирного торгового центра в Нью Йорке. После чего башни-близнецы загорелись и через несколько часов рухнули, полностью развалившись на части... Одни (в том числе и американское правительство) считают Алькаиду виновной в этом терракте, другие подозревают в случившемся диверсию американской власти и американских спецслужб...