├── .gitignore ├── Dependencies ├── CMPopTipView │ ├── CMPopTipView.h │ └── CMPopTipView.m ├── CaptureCamera │ ├── CaptureCameraResource │ │ ├── camera_line.png │ │ ├── camera_line@2x.png │ │ ├── flashing_auto@2x.png │ │ ├── flashing_off@2x.png │ │ ├── flashing_on@2x.png │ │ ├── g_tabbar_ic_video_down.png │ │ ├── g_tabbar_ic_video_down@2x.png │ │ ├── g_tabbar_ic_video_nor.png │ │ ├── g_tabbar_ic_video_nor@2x.png │ │ ├── photo_close_icon@2x.png │ │ ├── record_close_disable.png │ │ ├── record_close_disable@2x.png │ │ ├── record_close_highlighted.png │ │ ├── record_close_highlighted@2x.png │ │ ├── record_close_normal.png │ │ ├── record_close_normal@2x.png │ │ ├── record_delete_disable.png │ │ ├── record_delete_disable@2x.png │ │ ├── record_delete_normal.png │ │ ├── record_delete_normal@2x.png │ │ ├── record_deletesure_normal.png │ │ ├── record_deletesure_normal@2x.png │ │ ├── record_flashlight_disable.png │ │ ├── record_flashlight_disable@2x.png │ │ ├── record_flashlight_highlighted.png │ │ ├── record_flashlight_highlighted@2x.png │ │ ├── record_flashlight_normal.png │ │ ├── record_flashlight_normal@2x.png │ │ ├── record_focus_disable.png │ │ ├── record_focus_disable@2x.png │ │ ├── record_focus_highlighted.png │ │ ├── record_focus_highlighted@2x.png │ │ ├── record_focus_normal.png │ │ ├── record_focus_normal@2x.png │ │ ├── record_focus_off.png │ │ ├── record_focus_off@2x.png │ │ ├── record_icon_hook.png │ │ ├── record_icon_hook@2x.png │ │ ├── record_icon_hook_highlighted_bg.png │ │ ├── record_icon_hook_highlighted_bg@2x.png │ │ ├── record_icon_hook_normal.png │ │ ├── record_icon_hook_normal@2x.png │ │ ├── record_icon_hook_normal_bg.png │ │ ├── record_icon_hook_normal_bg@2x.png │ │ ├── record_lensflip_disable.png │ │ ├── record_lensflip_disable@2x.png │ │ ├── record_lensflip_highlighted.png │ │ ├── record_lensflip_highlighted@2x.png │ │ ├── record_lensflip_normal.png │ │ ├── record_lensflip_normal@2x.png │ │ ├── record_progressbar_front.png │ │ ├── record_progressbar_front@2x.png │ │ ├── record_tool_disable.png │ │ ├── record_tool_disable@2x.png │ │ ├── record_tool_highlighted.png │ │ ├── record_tool_highlighted@2x.png │ │ ├── record_tool_normal.png │ │ ├── record_tool_normal@2x.png │ │ ├── touch_focus_not.png │ │ ├── touch_focus_not@2x.png │ │ ├── vedio_nav_btn_back_nor.png │ │ ├── vedio_nav_btn_back_nor@2x.png │ │ ├── vedio_nav_btn_back_pre.png │ │ ├── vedio_nav_btn_back_pre@2x.png │ │ ├── video_icon.png │ │ ├── video_icon@2x.png │ │ ├── video_longvideo_btn_pause.png │ │ ├── video_longvideo_btn_pause@2x.png │ │ ├── video_longvideo_btn_shoot.png │ │ ├── video_longvideo_btn_shoot@2x.png │ │ └── video_longvideo_btn_shot@2x.png │ ├── CaptureViewController │ │ ├── CaptureViewController.h │ │ ├── CaptureViewController.m │ │ ├── DeleteButton │ │ │ ├── DeleteButton.h │ │ │ └── DeleteButton.m │ │ └── ProgressBar │ │ │ ├── ProgressBar.h │ │ │ └── ProgressBar.m │ ├── DDHTimerControl │ │ ├── DDHTimerControl.h │ │ └── DDHTimerControl.m │ └── VideoCapture │ │ ├── CameraRecorder.h │ │ ├── CameraRecorder.m │ │ ├── CaptureDefine.h │ │ ├── CaptureToolKit.h │ │ └── CaptureToolKit.m ├── Category │ ├── NSString+Height.h │ ├── NSString+Height.m │ ├── UIAlertController+Blocks.h │ ├── UIAlertController+Blocks.m │ ├── UIAlertView+Blocks.h │ └── UIAlertView+Blocks.m ├── CommonDefine.h ├── CustomVideoCompositor │ ├── AVAsset+help.h │ ├── AVAsset+help.m │ ├── CustomVideoCompositor.h │ └── CustomVideoCompositor.m ├── DBPrivacyHelper │ ├── DBPrivacyHelperAssets.xcassets │ │ └── DBPrivacyHelperIcons │ │ │ ├── dbph_alertIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_alertIcon.png │ │ │ ├── dbph_alertIcon@2x.png │ │ │ └── dbph_alertIcon@3x.png │ │ │ ├── dbph_appIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_appIcon.png │ │ │ ├── dbph_appIcon@2x.png │ │ │ └── dbph_appIcon@3x.png │ │ │ ├── dbph_cameraIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_camera.png │ │ │ ├── dbph_camera@2x.png │ │ │ └── dbph_camera@3x.png │ │ │ ├── dbph_checkIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_check.png │ │ │ ├── dbph_check@2x.png │ │ │ └── dbph_check@3x.png │ │ │ ├── dbph_contactsIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── contacts.png │ │ │ ├── contacts@2x.png │ │ │ └── contacts@3x.png │ │ │ ├── dbph_healthIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_health.png │ │ │ ├── dbph_health@2x.png │ │ │ └── dbph_health@3x.png │ │ │ ├── dbph_homekitIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_homekit.png │ │ │ ├── dbph_homekit@2x.png │ │ │ └── dbph_homekit@3x.png │ │ │ ├── dbph_localizationIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_localization.png │ │ │ ├── dbph_localization@2x.png │ │ │ └── dbph_localization@3x.png │ │ │ ├── dbph_motionIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_motion.png │ │ │ ├── dbph_motion@2x.png │ │ │ └── dbph_motion@3x.png │ │ │ ├── dbph_notificationsIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_notifications.png │ │ │ ├── dbph_notifications@2x.png │ │ │ └── dbph_notifications@3x.png │ │ │ ├── dbph_photoIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_photo.png │ │ │ ├── dbph_photo@2x.png │ │ │ └── dbph_photo@3x.png │ │ │ ├── dbph_privacyIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_privacy.png │ │ │ ├── dbph_privacy@2x.png │ │ │ └── dbph_privacy@3x.png │ │ │ ├── dbph_settingsIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_settings.png │ │ │ ├── dbph_settings@2x.png │ │ │ └── dbph_settings@3x.png │ │ │ └── dbph_switchIcon.imageset │ │ │ ├── Contents.json │ │ │ ├── dbph_switch.png │ │ │ ├── dbph_switch@2x.png │ │ │ └── dbph_switch@3x.png │ ├── DBPrivacyHelperDataSource.h │ ├── DBPrivacyHelperDataSource.m │ ├── DBPrivacyHelperLocalizations │ │ ├── en.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ │ ├── es.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ │ ├── it.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ │ ├── ko.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ │ ├── zh-Hans.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ │ └── zh-Hant.lproj │ │ │ └── DBPrivacyHelperLocalizable.strings │ ├── DBPrivateHelperCell.h │ ├── DBPrivateHelperCell.m │ ├── DBPrivateHelperController.h │ ├── DBPrivateHelperController.m │ ├── UIImage+ImageEffects.h │ ├── UIImage+ImageEffects.m │ ├── UIViewController+DBPrivacyHelper.h │ └── UIViewController+DBPrivacyHelper.m ├── InAppSettingsKit │ ├── Controllers │ │ ├── IASKAppSettingsViewController.h │ │ ├── IASKAppSettingsViewController.m │ │ ├── IASKAppSettingsWebViewController.h │ │ ├── IASKAppSettingsWebViewController.m │ │ ├── IASKMultipleValueSelection.h │ │ ├── IASKMultipleValueSelection.m │ │ ├── IASKSpecifierValuesViewController.h │ │ ├── IASKSpecifierValuesViewController.m │ │ └── IASKViewController.h │ ├── Models │ │ ├── IASKSettingsReader.h │ │ ├── IASKSettingsReader.m │ │ ├── IASKSettingsStore.h │ │ ├── IASKSettingsStore.m │ │ ├── IASKSettingsStoreFile.h │ │ ├── IASKSettingsStoreFile.m │ │ ├── IASKSettingsStoreUserDefaults.h │ │ ├── IASKSettingsStoreUserDefaults.m │ │ ├── IASKSpecifier.h │ │ └── IASKSpecifier.m │ ├── Resources │ │ ├── Base.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── de.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── el.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── en.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── es.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── fr.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── it.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── ja.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── nl.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── pt-PT.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── pt.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── ru.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── sv.lproj │ │ │ └── IASKLocalizable.strings │ │ ├── th.lproj │ │ │ └── IASKLocalizable.strings │ │ └── tr.lproj │ │ │ └── IASKLocalizable.strings │ ├── Settings.bundle │ │ ├── Root.plist │ │ ├── en.lproj │ │ │ └── Root.strings │ │ └── zh-Hans.lproj │ │ │ └── Root.strings │ └── Views │ │ ├── IASKPSSliderSpecifierViewCell.h │ │ ├── IASKPSSliderSpecifierViewCell.m │ │ ├── IASKPSTextFieldSpecifierViewCell.h │ │ ├── IASKPSTextFieldSpecifierViewCell.m │ │ ├── IASKSlider.h │ │ ├── IASKSlider.m │ │ ├── IASKSwitch.h │ │ ├── IASKSwitch.m │ │ ├── IASKTextField.h │ │ └── IASKTextField.m ├── JGActionSheet │ ├── JGActionSheet.h │ └── JGActionSheet.m ├── KGModal │ ├── KGModal.h │ └── KGModal.m ├── MBProgressHUD │ ├── MBProgressHUD.h │ ├── MBProgressHUD.m │ ├── SNLoading.h │ └── SNLoading.m ├── StickerView │ ├── CircleView.h │ ├── CircleView.m │ ├── GIFImageView.h │ ├── GIFImageView.m │ ├── ScrollSelectView.h │ ├── ScrollSelectView.m │ ├── StickerView.h │ ├── StickerView.m │ ├── UIView+Frame.h │ ├── UIView+Frame.m │ ├── VideoView.h │ ├── VideoView.m │ ├── selected.png │ └── turnoff_icon.png ├── VideoEffects │ ├── ExportEffects.h │ └── ExportEffects.m └── VideoPlay │ ├── PBJVideoPlayerController.h │ ├── PBJVideoPlayerController.m │ ├── PBJVideoView.h │ ├── PBJVideoView.m │ └── play_button@2x.png ├── IMG_0009.MP4 ├── LICENSE ├── PictureInPicture.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── PictureInPicture.xccheckout │ └── xcuserdata │ │ ├── JohnnyXu.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ └── johnny.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ ├── JohnnyXu.xcuserdatad │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ │ ├── PictureInPicture.xcscheme │ │ └── xcschememanagement.plist │ └── johnny.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── PictureInPicture.xcscheme │ └── xcschememanagement.plist ├── PictureInPicture ├── AppDelegate.h ├── AppDelegate.m ├── Images.xcassets │ ├── AppIcon-2.appiconset │ │ ├── Contents.json │ │ ├── Icon_29.png │ │ ├── Icon_29@2x-1.png │ │ ├── Icon_29@2x.png │ │ ├── Icon_40.png │ │ ├── Icon_40@2x-1.png │ │ ├── Icon_40@2x.png │ │ ├── Icon_60@2x.png │ │ ├── Icon_60@3x.png │ │ ├── Icon_76.png │ │ └── Icon_76@2x.png │ └── LaunchImage-2.launchimage │ │ ├── Contents.json │ │ ├── Default-568@2x.png │ │ ├── Default-Portrait.png │ │ ├── Default-Portrait@2x.png │ │ └── Default@2x.png ├── Info.plist ├── PictureInPicture-Prefix.pch ├── ViewController.h ├── ViewController.m ├── en.lproj │ ├── InfoPlist.strings │ └── Localizable.strings ├── main.m └── zh-Hans.lproj │ ├── InfoPlist.strings │ └── Localizable.strings ├── PictureInPictureTests ├── Info.plist └── PictureInPictureTests.m ├── README.md └── Resource ├── Demo └── Demo.gif ├── Font └── 迷你简启体.ttf ├── Icon ├── Icon_1024.png ├── Icon_128.png ├── Icon_16.png ├── Icon_256.png ├── Icon_29.png ├── Icon_29@2x.png ├── Icon_29@3x.png ├── Icon_32.png ├── Icon_40.png ├── Icon_40@2x.png ├── Icon_40@3x.png ├── Icon_512.png ├── Icon_60@2x.png ├── Icon_60@3x.png ├── Icon_64.png ├── Icon_76.png └── Icon_76@2x.png ├── Images ├── GoalLetter.png ├── NewStart.png ├── StartLetter.png ├── Video_Add.png ├── close.png ├── close@2x.png ├── navbar.png ├── pause.png ├── sharebg.png ├── sharebg2.png ├── sharebg3.png └── start.png ├── Musics ├── A Little Kiss.mp3 ├── Apple.mp3 ├── Bye Bye Sunday.mp3 ├── Come With Me.mp3 ├── Dolphin Tango.mp3 ├── I Do.mp3 ├── Lead Me On.mp3 ├── Let Me Know.mp3 ├── Love Paradise.mp3 ├── Rabbit.mp3 └── Swing Dance.mp3 ├── Splash ├── Default-568@2x.png ├── Default-Portrait.png ├── Default-Portrait@2x.png ├── Default.png └── Default@2x.png └── Videos └── IMG_Dst.mp4 /.gitignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .DS_Store -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/camera_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/camera_line.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/camera_line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/camera_line@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/flashing_auto@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/flashing_auto@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/flashing_off@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/flashing_off@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/flashing_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/flashing_on@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_down.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_down@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_nor.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_nor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/g_tabbar_ic_video_nor@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/photo_close_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/photo_close_icon@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_highlighted.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_highlighted@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_close_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_close_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_delete_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_delete_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_delete_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_delete_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_delete_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_delete_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_delete_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_delete_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_deletesure_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_deletesure_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_deletesure_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_deletesure_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_highlighted.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_highlighted@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_flashlight_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_highlighted.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_highlighted@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_off.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_focus_off@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_focus_off@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_highlighted_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_highlighted_bg.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_highlighted_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_highlighted_bg@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal_bg.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_icon_hook_normal_bg@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_highlighted.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_highlighted@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_lensflip_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_progressbar_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_progressbar_front.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_progressbar_front@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_progressbar_front@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_disable.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_disable@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_highlighted.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_highlighted@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_normal.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/record_tool_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/record_tool_normal@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/touch_focus_not.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/touch_focus_not.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/touch_focus_not@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/touch_focus_not@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_nor.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_nor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_nor@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_pre.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_pre@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/vedio_nav_btn_back_pre@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_icon.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_icon@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_pause.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_pause@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shoot.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shoot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shoot@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/CaptureCamera/CaptureCameraResource/video_longvideo_btn_shot@2x.png -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureViewController/CaptureViewController.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | #import "CaptureDefine.h" 5 | #import "CameraRecorder.h" 6 | 7 | @interface CaptureViewController : UIViewController 8 | { 9 | 10 | } 11 | 12 | // Add callback by Johnny Xu 13 | @property (copy, nonatomic) GenericCallback callback; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureViewController/DeleteButton/DeleteButton.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | typedef enum 5 | { 6 | DeleteButtonStyleDelete, 7 | DeleteButtonStyleNormal, 8 | DeleteButtonStyleDisable, 9 | }DeleteButtonStyle; 10 | 11 | @interface DeleteButton : UIButton 12 | 13 | @property (assign, nonatomic) DeleteButtonStyle style; 14 | 15 | + (DeleteButton *)getInstance; 16 | - (void)setButtonStyle:(DeleteButtonStyle)style; 17 | 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureViewController/DeleteButton/DeleteButton.m: -------------------------------------------------------------------------------- 1 | 2 | #import "DeleteButton.h" 3 | 4 | #define DELETE_BTN_NORMAL_IAMGE @"record_delete_normal.png" 5 | #define DELETE_BTN_DELETE_IAMGE @"record_deletesure_normal.png" 6 | #define DELETE_BTN_DISABLE_IMAGE @"record_delete_disable.png" 7 | 8 | @interface DeleteButton () 9 | 10 | 11 | @end 12 | 13 | @implementation DeleteButton 14 | 15 | + (DeleteButton *)getInstance 16 | { 17 | DeleteButton *deleteButton = [[DeleteButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 18 | return deleteButton; 19 | } 20 | 21 | - (id)initWithFrame:(CGRect)frame 22 | { 23 | self = [super initWithFrame:frame]; 24 | 25 | if (self) 26 | { 27 | [self initalize]; 28 | } 29 | return self; 30 | } 31 | 32 | - (void)initalize 33 | { 34 | [self setImage:[UIImage imageNamed:DELETE_BTN_NORMAL_IAMGE] forState:UIControlStateNormal]; 35 | [self setImage:[UIImage imageNamed:DELETE_BTN_DISABLE_IMAGE] forState:UIControlStateDisabled]; 36 | } 37 | 38 | - (void)setButtonStyle:(DeleteButtonStyle)style 39 | { 40 | self.style = style; 41 | switch (style) 42 | { 43 | case DeleteButtonStyleNormal: 44 | { 45 | self.enabled = YES; 46 | [self setImage:[UIImage imageNamed:DELETE_BTN_NORMAL_IAMGE] forState:UIControlStateNormal]; 47 | 48 | break; 49 | } 50 | case DeleteButtonStyleDisable: 51 | { 52 | self.enabled = NO; 53 | break; 54 | } 55 | case DeleteButtonStyleDelete: 56 | { 57 | self.enabled = YES; 58 | [self setImage:[UIImage imageNamed:DELETE_BTN_DELETE_IAMGE] forState:UIControlStateNormal]; 59 | 60 | break; 61 | } 62 | default: 63 | break; 64 | } 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/CaptureViewController/ProgressBar/ProgressBar.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import "CaptureDefine.h" 4 | 5 | typedef enum 6 | { 7 | ProgressBarProgressStyleNormal, 8 | ProgressBarProgressStyleDelete, 9 | } ProgressBarProgressStyle; 10 | 11 | @interface ProgressBar : UIView 12 | 13 | + (ProgressBar *)getInstance; 14 | 15 | - (void)setLastProgressToStyle:(ProgressBarProgressStyle)style; 16 | - (void)setLastProgressToWidth:(CGFloat)width; 17 | 18 | - (void)deleteLastProgress; 19 | - (void)addProgressView; 20 | 21 | - (void)stopShining; 22 | - (void)startShining; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/DDHTimerControl/DDHTimerControl.h: -------------------------------------------------------------------------------- 1 | // 2 | // DDHTimerControl.h 3 | // DDHTimerControlDemo 4 | // 5 | // Created by Dominik Hauser on 29.05.14. 6 | // Copyright (c) 2014 Dominik Hauser. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * Type of the timer ring 13 | */ 14 | typedef NS_ENUM(NSUInteger, DDHTimerType) { 15 | /** 16 | * The ring looks like a clock 17 | */ 18 | DDHTimerTypeElements = 0, 19 | /** 20 | * All the elements are equal 21 | */ 22 | DDHTimerTypeEqualElements, 23 | /** 24 | * The ring is a solid line 25 | */ 26 | DDHTimerTypeSolid, 27 | /** 28 | * The number of the different types 29 | */ 30 | DDHTimerTypeNumberOfTypes 31 | }; 32 | 33 | /** 34 | * A simple subclass of UIControl to set seconds or minutes 35 | */ 36 | @interface DDHTimerControl : UIControl 37 | 38 | /** 39 | * The value of the control 40 | */ 41 | @property (nonatomic, assign) NSInteger minutesOrSeconds; 42 | 43 | /** 44 | * The maximal allowed value 45 | */ 46 | @property (nonatomic, assign) NSInteger maxValue; 47 | 48 | /** 49 | * The color of the control 50 | */ 51 | @property (nonatomic, strong) UIColor *color; 52 | 53 | /** 54 | * The color of the control during interaction 55 | */ 56 | @property (nonatomic, strong) UIColor *highlightColor; 57 | 58 | /** 59 | * The label for the title show below the value 60 | */ 61 | @property (nonatomic, strong) UILabel *titleLabel; 62 | 63 | /** 64 | * The ring width 65 | */ 66 | @property (nonatomic, assign) CGFloat ringWidth; 67 | 68 | /** 69 | * The timer type 70 | */ 71 | @property (nonatomic, assign) DDHTimerType type; 72 | 73 | /** 74 | * Create a timer control with a type 75 | * 76 | * @param type The type the conrol should have 77 | * 78 | * @return An initialized timer control 79 | */ 80 | + (instancetype)timerControlWithType:(DDHTimerType)type; 81 | 82 | /** 83 | * The setter for the value 84 | * 85 | * @param minutesOrSeconds The new value 86 | */ 87 | - (void)setMinutesOrSeconds:(NSInteger)minutesOrSeconds; 88 | 89 | @end 90 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/VideoCapture/CameraRecorder.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | #import 5 | #import "CommonDefine.h" 6 | 7 | @class CameraRecorder; 8 | @protocol CameraRecorderDelegate 9 | 10 | @optional 11 | - (void)didStartCurrentRecording:(NSURL *)fileURL; 12 | 13 | - (void)didFinishCurrentRecording:(NSURL *)outputFileURL duration:(CGFloat)videoDuration totalDuration:(CGFloat)totalDuration error:(NSError *)error; 14 | 15 | - (void)doingCurrentRecording:(NSURL *)outputFileURL duration:(CGFloat)videoDuration recordedVideosTotalDuration:(CGFloat)totalDuration; 16 | 17 | - (void)didRemoveCurrentVideo:(NSURL *)fileURL totalDuration:(CGFloat)totalDuration error:(NSError *)error; 18 | 19 | @required 20 | - (void)didRecordingMultiVideosSuccess:(NSArray *)outputFilesURL; 21 | - (void)didRecordingVideosSuccess:(NSURL *)outputFileURL; 22 | - (void)didRecordingVideosError:(NSError*)error; 23 | 24 | - (void)didTakePictureSuccess:(NSString *)outputFile; 25 | - (void)didTakePictureError:(NSError*)error; 26 | 27 | @end 28 | 29 | 30 | @interface CameraRecorder : NSObject 31 | 32 | @property (weak, nonatomic) id delegate; 33 | @property (strong, nonatomic) AVCaptureVideoPreviewLayer *previewLayer; 34 | 35 | - (CGFloat)getTotalVideoDuration; 36 | - (NSUInteger)getVideoCount; 37 | 38 | - (void)deleteLastVideo; 39 | - (void)deleteAllVideo; 40 | 41 | - (void)startRecordingToOutputFileURL:(NSURL *)fileURL; 42 | - (void)stopCurrentVideoRecording; 43 | - (void)endVideoRecording; 44 | - (UIImage*)capturePicture; 45 | 46 | - (BOOL)isTorchOn; 47 | - (BOOL)isFrontCamera; 48 | 49 | - (BOOL)isCameraSupported; 50 | - (BOOL)isFrontCameraSupported; 51 | - (BOOL)isTorchSupported; 52 | 53 | - (void)switchCamera; 54 | - (void)openTorch:(BOOL)open; 55 | 56 | //- (void)focusInPoint:(CGPoint)touchPoint; 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/VideoCapture/CaptureDefine.h: -------------------------------------------------------------------------------- 1 | 2 | #define DEVICE_BOUNDS [[UIScreen mainScreen] applicationFrame] 3 | #define DEVICE_SIZE [[UIScreen mainScreen] applicationFrame].size 4 | #define DEVICE_OS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] 5 | 6 | #define DELTA_Y (DEVICE_OS_VERSION >= 7.0f? 20.0f : 0.0f) 7 | 8 | #define color(r, g, b, a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a] 9 | 10 | #define VIDEO_FOLDER @"Videos" 11 | 12 | #define MIN_VIDEO_DUR 3.0f 13 | #define MAX_VIDEO_DUR 15.0f 14 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/VideoCapture/CaptureToolKit.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @interface CaptureToolKit : NSObject 5 | 6 | + (void)setView:(UIView *)view toSizeWidth:(CGFloat)width; 7 | + (void)setView:(UIView *)view toOriginX:(CGFloat)x; 8 | + (void)setView:(UIView *)view toOriginY:(CGFloat)y; 9 | + (void)setView:(UIView *)view toOrigin:(CGPoint)origin; 10 | 11 | + (BOOL)createVideoFolderIfNotExist; 12 | + (NSString *)getVideoSaveFilePathString; 13 | + (NSString *)getVideoMergeFilePathString; 14 | + (NSString *)getVideoSaveFolderPathString; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Dependencies/CaptureCamera/VideoCapture/CaptureToolKit.m: -------------------------------------------------------------------------------- 1 | 2 | #import "CaptureToolKit.h" 3 | #import "CaptureDefine.h" 4 | 5 | @implementation CaptureToolKit 6 | 7 | + (void)setView:(UIView *)view toSizeWidth:(CGFloat)width 8 | { 9 | CGRect frame = view.frame; 10 | frame.size.width = width; 11 | view.frame = frame; 12 | } 13 | 14 | + (void)setView:(UIView *)view toOriginX:(CGFloat)x 15 | { 16 | CGRect frame = view.frame; 17 | frame.origin.x = x; 18 | view.frame = frame; 19 | } 20 | 21 | + (void)setView:(UIView *)view toOriginY:(CGFloat)y 22 | { 23 | CGRect frame = view.frame; 24 | frame.origin.y = y; 25 | view.frame = frame; 26 | } 27 | 28 | + (void)setView:(UIView *)view toOrigin:(CGPoint)origin 29 | { 30 | CGRect frame = view.frame; 31 | frame.origin = origin; 32 | view.frame = frame; 33 | } 34 | 35 | + (BOOL)createVideoFolderIfNotExist 36 | { 37 | NSString *folderPath = [self getOutputFilePath]; 38 | 39 | NSFileManager *fileManager = [NSFileManager defaultManager]; 40 | BOOL isDir = FALSE; 41 | BOOL isDirExist = [fileManager fileExistsAtPath:folderPath isDirectory:&isDir]; 42 | 43 | if(!(isDirExist && isDir)) 44 | { 45 | BOOL bCreateDir = [fileManager createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil]; 46 | if(!bCreateDir) 47 | { 48 | NSLog(@"创建图片文件夹失败"); 49 | return NO; 50 | } 51 | 52 | return YES; 53 | } 54 | 55 | return YES; 56 | } 57 | 58 | + (NSString *)getVideoMergeFilePathString 59 | { 60 | NSString *path = [self getOutputFilePath]; 61 | 62 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 63 | formatter.dateFormat = @"yyyyMMddHHmmss"; 64 | NSString *nowTimeStr = [formatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:0]]; 65 | 66 | NSString *fileName = [[path stringByAppendingPathComponent:nowTimeStr] stringByAppendingString:@"merge.mov"]; 67 | return fileName; 68 | } 69 | 70 | + (NSString *)getVideoSaveFilePathString 71 | { 72 | NSString *path = [self getOutputFilePath]; 73 | 74 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 75 | formatter.dateFormat = @"yyyyMMddHHmmss"; 76 | NSString *nowTimeStr = [formatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:0]]; 77 | 78 | NSString *fileName = [[path stringByAppendingPathComponent:nowTimeStr] stringByAppendingString:@".mov"]; 79 | return fileName; 80 | } 81 | 82 | + (NSString *)getVideoSaveFolderPathString 83 | { 84 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 85 | NSString *path = [paths objectAtIndex:0]; 86 | 87 | path = [path stringByAppendingPathComponent:VIDEO_FOLDER]; 88 | return path; 89 | } 90 | 91 | + (NSString *)getOutputFilePath 92 | { 93 | NSString* path = [NSTemporaryDirectory() stringByAppendingPathComponent:VIDEO_FOLDER]; 94 | return path; 95 | } 96 | 97 | @end 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /Dependencies/Category/NSString+Height.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Height 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Height) 12 | 13 | // Add by Johnny Xu, 2015/2/28 14 | - (CGFloat)maxWidthForText:(NSString *)text height:(CGFloat)textHeight font:(UIFont*)font; 15 | - (CGSize)maxHeightForText:(NSString *)text width:(CGFloat)textWidth font:(UIFont*)font; 16 | - (CGSize)sizeForText:(NSString *)text font:(UIFont*)font; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Dependencies/Category/NSString+Height.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Height 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import "NSString+Height.h" 10 | 11 | @implementation NSString (Height) 12 | 13 | //- (CGSize)sizeWithFontSize:(CGFloat)fontSize constrainedWidth:(CGFloat)width 14 | //{ 15 | // CGSize constraint = CGSizeMake(width, 20000.0f); 16 | // 17 | // if (iOS6) { 18 | // return [self sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint]; 19 | // } 20 | // else { 21 | // CGRect rect = [self boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]} context:nil]; 22 | // return rect.size; 23 | // } 24 | //} 25 | // 26 | //- (float)widthInSingleLine:(CGFloat)fontSize 27 | //{ 28 | //// UILabel *tmpLabel = [[UILabel alloc] init]; 29 | //// [tmpLabel setFont:[UIFont systemFontOfSize:fontSize]]; 30 | //// [tmpLabel setText:self]; 31 | //// [tmpLabel sizeToFit]; 32 | //// 33 | //// return tmpLabel.width; 34 | // 35 | // CGSize size = [self sizeWithFont:[UIFont systemFontOfSize:fontSize]]; 36 | // return size.width; 37 | //} 38 | 39 | - (CGFloat)maxWidthForText:(NSString *)text height:(CGFloat)textHeight font:(UIFont*)font 40 | { 41 | CGSize constrainedSize = CGSizeMake(CGFLOAT_MAX, textHeight); 42 | NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 43 | font, NSFontAttributeName, 44 | nil]; 45 | NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:text attributes:attributesDictionary]; 46 | CGRect requiredSize = [string boundingRectWithSize:constrainedSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil]; 47 | 48 | if (requiredSize.size.height > textHeight) 49 | { 50 | requiredSize = CGRectMake(0, 0, requiredSize.size.width, textHeight); 51 | } 52 | 53 | // NSLog(@"maxWidthForText: %f", requiredSize.size.width); 54 | 55 | return requiredSize.size.width; 56 | } 57 | 58 | - (CGSize)maxHeightForText:(NSString *)text width:(CGFloat)textWidth font:(UIFont*)font 59 | { 60 | CGSize constrainedSize = CGSizeMake(textWidth, CGFLOAT_MAX); 61 | NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 62 | font, NSFontAttributeName, 63 | nil]; 64 | NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:text attributes:attributesDictionary]; 65 | CGRect requiredSize = [string boundingRectWithSize:constrainedSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil]; 66 | 67 | if (requiredSize.size.width > textWidth) 68 | { 69 | requiredSize = CGRectMake(0, 0, textWidth, requiredSize.size.height); 70 | } 71 | 72 | // NSLog(@"maxHeightForText: %f", requiredSize.size.height); 73 | 74 | return requiredSize.size; 75 | } 76 | 77 | - (CGSize)sizeForText:(NSString *)text font:(UIFont*)font 78 | { 79 | CGSize constrainedSize = CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX); 80 | NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 81 | font, NSFontAttributeName, 82 | nil]; 83 | NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:text attributes:attributesDictionary]; 84 | CGRect requiredSize = [string boundingRectWithSize:constrainedSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil]; 85 | 86 | // NSLog(@"sizeForText width: %f, height: %f", requiredSize.size.width, requiredSize.size.height); 87 | 88 | return requiredSize.size; 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Dependencies/Category/UIAlertController+Blocks.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertController+Blocks.h 3 | // UIAlertControllerBlocks 4 | // 5 | // Created by Ryan Maxwell on 11/09/14. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014 Ryan Maxwell 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 12 | // this software and associated documentation files (the "Software"), to deal in 13 | // the Software without restriction, including without limitation the rights to 14 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 15 | // the Software, and to permit persons to whom the Software is furnished to do so, 16 | // subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in all 19 | // copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 23 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 24 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 25 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | #import 30 | 31 | typedef void (^UIAlertControllerPopoverPresentationControllerBlock) (UIPopoverPresentationController * __nonnull popover); 32 | typedef void (^UIAlertControllerCompletionBlock) (UIAlertController * __nonnull controller, UIAlertAction * __nonnull action, NSInteger buttonIndex); 33 | 34 | @interface UIAlertController (Blocks) 35 | 36 | + (nonnull instancetype)showInViewController:(nonnull UIViewController *)viewController 37 | withTitle:(nullable NSString *)title 38 | message:(nullable NSString *)message 39 | preferredStyle:(UIAlertControllerStyle)preferredStyle 40 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 41 | destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle 42 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 43 | popoverPresentationControllerBlock:(nullable UIAlertControllerPopoverPresentationControllerBlock)popoverPresentationControllerBlock 44 | tapBlock:(nullable UIAlertControllerCompletionBlock)tapBlock; 45 | 46 | + (nonnull instancetype)showAlertInViewController:(nonnull UIViewController *)viewController 47 | withTitle:(nullable NSString *)title 48 | message:(nullable NSString *)message 49 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 50 | destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle 51 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 52 | tapBlock:(nullable UIAlertControllerCompletionBlock)tapBlock; 53 | 54 | + (nonnull instancetype)showActionSheetInViewController:(nonnull UIViewController *)viewController 55 | withTitle:(nullable NSString *)title 56 | message:(nullable NSString *)message 57 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 58 | destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle 59 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 60 | popoverPresentationControllerBlock:(nullable UIAlertControllerPopoverPresentationControllerBlock)popoverPresentationControllerBlock 61 | tapBlock:(nullable UIAlertControllerCompletionBlock)tapBlock; 62 | 63 | @property (readonly, nonatomic) BOOL visible; 64 | @property (readonly, nonatomic) NSInteger cancelButtonIndex; 65 | @property (readonly, nonatomic) NSInteger firstOtherButtonIndex; 66 | @property (readonly, nonatomic) NSInteger destructiveButtonIndex; 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Dependencies/Category/UIAlertView+Blocks.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertView+Blocks.h 3 | // UIAlertViewBlocks 4 | // 5 | // Created by Ryan Maxwell on 29/08/13. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2013 Ryan Maxwell 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 12 | // this software and associated documentation files (the "Software"), to deal in 13 | // the Software without restriction, including without limitation the rights to 14 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 15 | // the Software, and to permit persons to whom the Software is furnished to do so, 16 | // subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in all 19 | // copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 23 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 24 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 25 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | #import 30 | 31 | typedef void (^UIAlertViewBlock) (UIAlertView * __nonnull alertView); 32 | typedef void (^UIAlertViewCompletionBlock) (UIAlertView * __nonnull alertView, NSInteger buttonIndex); 33 | 34 | @interface UIAlertView (Blocks) 35 | 36 | + (nonnull instancetype)showWithTitle:(nullable NSString *)title 37 | message:(nullable NSString *)message 38 | style:(UIAlertViewStyle)style 39 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 40 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 41 | tapBlock:(nullable UIAlertViewCompletionBlock)tapBlock; 42 | 43 | + (nonnull instancetype)showWithTitle:(nullable NSString *)title 44 | message:(nullable NSString *)message 45 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 46 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 47 | tapBlock:(nullable UIAlertViewCompletionBlock)tapBlock; 48 | 49 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock tapBlock; 50 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock willDismissBlock; 51 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock didDismissBlock; 52 | 53 | @property (copy, nonatomic, nullable) UIAlertViewBlock willPresentBlock; 54 | @property (copy, nonatomic, nullable) UIAlertViewBlock didPresentBlock; 55 | @property (copy, nonatomic, nullable) UIAlertViewBlock cancelBlock; 56 | 57 | @property (copy, nonatomic, nullable) BOOL(^shouldEnableFirstOtherButtonBlock)(UIAlertView * __nonnull alertView); 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Dependencies/CustomVideoCompositor/AVAsset+help.h: -------------------------------------------------------------------------------- 1 | // 2 | // AVAsset (help) 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AVAsset (help) 12 | 13 | + (instancetype)assetWithResourceName:(NSString *)name; 14 | + (instancetype)assetWithFileURL:(NSURL *)url; 15 | - (AVAssetTrack *)firstVideoTrack; 16 | 17 | - (void)whenProperties:(NSArray *)propertyNames areReadyDo:(void (^)(void))block; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Dependencies/CustomVideoCompositor/AVAsset+help.m: -------------------------------------------------------------------------------- 1 | // 2 | // AVAsset (help) 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import "AVAsset+help.h" 10 | 11 | @implementation AVAsset (help) 12 | 13 | + (instancetype)assetWithResourceName:(NSString *)name 14 | { 15 | NSURL *url = [[NSBundle mainBundle] URLForResource:name withExtension:nil]; 16 | return [self assetWithURL:url]; 17 | } 18 | 19 | + (instancetype)assetWithFileURL:(NSURL *)url 20 | { 21 | return [self assetWithURL:url]; 22 | } 23 | 24 | - (AVAssetTrack *)firstVideoTrack 25 | { 26 | NSArray *tracks = [self tracksWithMediaType:AVMediaTypeVideo]; 27 | return [tracks firstObject]; 28 | } 29 | 30 | - (void)whenProperties:(NSArray *)names areReadyDo:(void (^)(void))block 31 | { 32 | [self loadValuesAsynchronouslyForKeys:names completionHandler:^{ 33 | NSMutableArray *pendingNames; 34 | for (NSString *name in names) 35 | { 36 | switch ([self statusOfValueForKey:name error:nil]) 37 | { 38 | case AVKeyValueStatusLoaded: 39 | case AVKeyValueStatusFailed: 40 | break; 41 | default: 42 | if (pendingNames == nil) 43 | { 44 | pendingNames = [NSMutableArray array]; 45 | } 46 | [pendingNames addObject:name]; 47 | } 48 | } 49 | 50 | if (pendingNames == nil) 51 | { 52 | block(); 53 | } 54 | else 55 | { 56 | [self whenProperties:pendingNames areReadyDo:block]; 57 | } 58 | }]; 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /Dependencies/CustomVideoCompositor/CustomVideoCompositor.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomVideoCompositor 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | @import AVFoundation; 11 | 12 | typedef NS_ENUM(NSInteger, MirrorType) 13 | { 14 | kMirrorNone = 0, 15 | kMirrorLeftRightMirror, 16 | kMirrorUpDownReflection, 17 | kMirror4Square, 18 | }; 19 | 20 | @interface CustomVideoCompositor : NSObject 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_alertIcon.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_alertIcon@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_alertIcon@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_alertIcon.imageset/dbph_alertIcon@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_appIcon.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_appIcon@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_appIcon@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_appIcon.imageset/dbph_appIcon@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_camera.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_camera@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_camera@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_cameraIcon.imageset/dbph_camera@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_check.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_check@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_check@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_checkIcon.imageset/dbph_check@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "contacts.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "contacts@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "contacts@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_contactsIcon.imageset/contacts@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_health.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_health@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_health@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_healthIcon.imageset/dbph_health@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_homekit.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_homekit@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_homekit@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_homekitIcon.imageset/dbph_homekit@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_localization.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_localization@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_localization@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_localizationIcon.imageset/dbph_localization@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_motion.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_motion@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_motion@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_motionIcon.imageset/dbph_motion@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_notifications.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_notifications@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_notifications@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_notificationsIcon.imageset/dbph_notifications@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_photo.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_photo@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_photo@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_photoIcon.imageset/dbph_photo@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_privacy.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_privacy@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_privacy@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_privacyIcon.imageset/dbph_privacy@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_settings.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_settings@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_settings@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_settingsIcon.imageset/dbph_settings@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "dbph_switch.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "dbph_switch@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "dbph_switch@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch@2x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/DBPrivacyHelper/DBPrivacyHelperAssets.xcassets/DBPrivacyHelperIcons/dbph_switchIcon.imageset/dbph_switch@3x.png -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperDataSource.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | /** 5 | * Privacy Types 6 | */ 7 | typedef NS_ENUM(NSUInteger, DBPrivacyType){ 8 | /** 9 | * Photos within camera roll 10 | */ 11 | DBPrivacyTypePhoto, 12 | /** 13 | * Use the Camera 14 | */ 15 | DBPrivacyTypeCamera, 16 | /** 17 | * Location Services 18 | */ 19 | DBPrivacyTypeLocation, 20 | /** 21 | * HealthKit 22 | */ 23 | DBPrivacyTypeHealth, 24 | /** 25 | * HomeKit 26 | */ 27 | DBPrivacyTypeHomeKit, 28 | /** 29 | * Motion Activity 30 | */ 31 | DBPrivacyTypeMotionActivity, 32 | /** 33 | * Access to Contacts 34 | */ 35 | DBPrivacyTypeContacts, 36 | /** 37 | * Push Notifications 38 | */ 39 | DBPrivacyTypeNotifications 40 | }; 41 | 42 | @interface NSString (DBPrivacyHelper) 43 | - (NSString *) localizedString; 44 | @end 45 | 46 | @interface DBPrivacyHelperDataSource : NSObject 47 | 48 | /** 49 | * Personal App Icon name for DBPrivacyTypeNotifications 50 | */ 51 | @property (nonatomic, strong) NSString *appIcon; 52 | 53 | /** 54 | * DBPrivacyHelper data dictionary 55 | */ 56 | @property (nonatomic, readonly) NSDictionary *cellData; 57 | @end -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/en.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "Close"; 3 | 4 | "Location Services" = "Location Services"; 5 | "Photos" = "Photos"; 6 | "Camera" = "Camera"; 7 | "Health" = "Health"; 8 | "HomeKit" = "HomeKit"; 9 | "Motion Activity" = "Motion Activity"; 10 | "Contacts" = "Contacts"; 11 | "Notifications" = "Notifications"; 12 | 13 | "Allow access to \"%@\"\nwith these steps:" = "Allow access to \"%@\"\nwith these steps:"; 14 | 15 | "Open device settings" = "Open device settings"; 16 | "Tap on Privacy" = "Tap on Privacy"; 17 | "Tap on \"%@\"" = "Tap on \"%@\""; 18 | "Allow your application to use \"%@\"" = "Allow your application to use \"%@\""; 19 | "Select the alert style you prefer" = "Select the alert style you prefer"; -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/es.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "Cerrar"; 3 | 4 | "Location Services" = "Localizacíon"; 5 | "Photos" = "Fotos"; 6 | "Camera" = "Cámara"; 7 | "Health" = "Salud"; 8 | "HomeKit" = "HomeKit"; 9 | "Motion Activity" = "Actividad física"; 10 | "Contacts" = "Contactos"; 11 | "Notifications" = "Notificaciones"; 12 | 13 | "Allow access to \"%@\"\nwith these steps:" = "Para habilitar el acceso a \"%@\"\nprocede de la siguiente manera:"; 14 | 15 | "Open device settings" = "Abrir configuración del dispositivo"; 16 | "Tap on Privacy" = "Selecciona Privacidad"; 17 | "Tap on \"%@\"" = "Selecciona \"%@\""; 18 | "Allow your application to use \"%@\"" = "Permitir a tu aplicación usar \"%@\""; 19 | "Select the alert style you prefer" = "Seleccionar el tipo de alerta que prefieras"; -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/it.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "Chiudi"; 3 | 4 | "Location Services" = "Localizzazione"; 5 | "Photos" = "Foto"; 6 | "Camera" = "Fotocamera"; 7 | "Health" = "Salute"; 8 | "HomeKit" = "HomeKit"; 9 | "Motion Activity" = "Attività motoria"; 10 | "Contacts" = "Contatti"; 11 | "Notifications" = "Notifiche"; 12 | 13 | "Allow access to \"%@\"\nwith these steps:" = "Abilita l'accesso a \"%@\"\nin questo modo:"; 14 | 15 | "Open device settings" = "Apri i settings del dispositivo"; 16 | "Tap on Privacy" = "Seleziona Privacy"; 17 | "Tap on \"%@\"" = "Seleziona \"%@\""; 18 | "Allow your application to use \"%@\"" = "Permetti alla tua applicazione di usare \"%@\""; 19 | "Select the alert style you prefer" = "Seleziona l'alert che preferisci"; -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/ko.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "닫기"; 3 | 4 | "Location Services" = "위치 서비스"; 5 | "Photos" = "사진"; 6 | "Camera" = "카메라"; 7 | "Health" = "건강"; 8 | "HomeKit" = "HomeKit"; 9 | "Motion Activity" = "동작 활동"; 10 | 11 | "Allow access to \"%@\"\nwith these steps:" = "다음과 같은 순서로 \"%@\"\n 접근 허락"; 12 | 13 | "Open device settings" = "기기 설정 열기"; 14 | "Tap on Privacy" = "개인 정보 보호 터치"; 15 | "Tap on \"%@\"" = "\"%@\" 터치 "; 16 | "Allow your application to use \"%@\"" = "어플리케이션의 \"%@\" 사용 허락"; 17 | -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/zh-Hans.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "关闭"; 3 | 4 | "Location Services" = "定位服务"; 5 | "Photos" = "照片"; 6 | "Camera" = "相机"; 7 | "Health" = "健康"; 8 | "HomeKit" = "HomeKit"; // It's also called HomeKit in zh-Hant 9 | "Motion Activity" = "运动记录"; 10 | "Contacts" = "通讯录"; 11 | "Notifications" = "通知"; // Must be translate 12 | 13 | "Allow access to \"%@\"\nwith these steps:" = "根据以下步骤\n打开「%@」权限"; 14 | 15 | "Open device settings" = "打开设备「设置」"; 16 | "Tap on Privacy" = "选择「隐私」"; 17 | "Tap on \"%@\"" = "选择「%@」"; 18 | "Allow your application to use \"%@\"" = "允许应用使用「%@」"; 19 | "Select the alert style you prefer" = "选择你喜爱的警告风格"; -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivacyHelperLocalizations/zh-Hant.lproj/DBPrivacyHelperLocalizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Close" = "關閉"; 3 | 4 | "Location Services" = "定位服務"; 5 | "Photos" = "照片"; 6 | "Camera" = "相機"; 7 | "Health" = "健康"; 8 | "HomeKit" = "HomeKit"; // It's also called HomeKit in zh-Hant 9 | "Motion Activity" = "運動紀錄"; 10 | "Contacts" = "聯絡資訊"; 11 | "Notifications" = "Notifications"; // Must be translate 12 | 13 | "Allow access to \"%@\"\nwith these steps:" = "根據以下步驟\n開啟「%@」功能"; 14 | 15 | "Open device settings" = "開啟裝置的設定"; 16 | "Tap on Privacy" = "選擇「隱私」"; 17 | "Tap on \"%@\"" = "選擇「%@」"; 18 | "Allow your application to use \"%@\"" = "允許應用程式使用「%@」"; 19 | "Select the alert style you prefer" = "Select the alert style you prefer"; -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivateHelperCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // DBPrivateHelperCell.h 3 | // DBPrivacyHelperExample 4 | // 5 | // Created by iBo on 10/11/14. 6 | // Copyright (c) 2014 iBo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DBPrivateHelperCell : UITableViewCell 12 | /** 13 | * Reuse Identifier for cell 14 | * 15 | * @return An instance type of DBPrivateHelperCell 16 | */ 17 | + (NSString *) identifier; 18 | 19 | /** 20 | * Set the cell values 21 | * 22 | * @param icon The icon 23 | * @param text The description text 24 | * @param row The row number 25 | */ 26 | - (void) setIcon:(NSString *)icon text:(NSString *)text row:(NSInteger)row; 27 | @end -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivateHelperCell.m: -------------------------------------------------------------------------------- 1 | 2 | #import "DBPrivateHelperCell.h" 3 | 4 | @interface DBPrivateHelperCell () 5 | { 6 | UIImageView *_iconView; 7 | UILabel *_cellLabel; 8 | } 9 | @end 10 | 11 | @implementation DBPrivateHelperCell 12 | 13 | + (NSString *) identifier 14 | { 15 | return @"kDBPrivateHelperCellIdentifier"; 16 | } 17 | 18 | - (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 19 | { 20 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 21 | if ( self ) { 22 | self.backgroundColor = [UIColor clearColor]; 23 | self.contentView.backgroundColor = self.backgroundColor; 24 | self.selectionStyle = UITableViewCellSelectionStyleNone; 25 | 26 | self.textLabel.font = [UIFont systemFontOfSize:10.0]; 27 | self.textLabel.textColor = [UIColor colorWithWhite:1.0 alpha:.75]; 28 | 29 | _iconView = [[UIImageView alloc] init]; 30 | _iconView.translatesAutoresizingMaskIntoConstraints = NO; 31 | [self.contentView addSubview:_iconView]; 32 | 33 | _cellLabel = [[UILabel alloc] init]; 34 | _cellLabel.translatesAutoresizingMaskIntoConstraints = NO; 35 | _cellLabel.backgroundColor = [UIColor clearColor]; 36 | _cellLabel.font = [UIFont boldSystemFontOfSize:12.0]; 37 | _cellLabel.textColor = [UIColor whiteColor]; 38 | _cellLabel.textAlignment = NSTextAlignmentLeft; 39 | _cellLabel.numberOfLines = 0; 40 | _cellLabel.lineBreakMode = NSLineBreakByWordWrapping; 41 | [self.contentView addSubview:_cellLabel]; 42 | 43 | NSDictionary *views = NSDictionaryOfVariableBindings(_iconView, _cellLabel); 44 | 45 | [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[_iconView(30)]-20-[_cellLabel]-20-|" options:0 metrics:nil views:views]]; 46 | [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_iconView(30)]" 47 | options:0 metrics:nil views:views]]; 48 | [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_cellLabel]-0-|" 49 | options:0 metrics:nil views:views]]; 50 | [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_iconView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]]; 51 | } 52 | return self; 53 | } 54 | 55 | - (void) setIcon:(NSString *)icon text:(NSString *)text row:(NSInteger)row 56 | { 57 | _iconView.image = [UIImage imageNamed:icon]; 58 | _cellLabel.text = text; 59 | self.textLabel.text = [NSString stringWithFormat:@"%li.", (long)row]; 60 | } 61 | 62 | @end -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/DBPrivateHelperController.h: -------------------------------------------------------------------------------- 1 | 2 | #define IS_IOS_8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ? 1 : 0) 3 | 4 | #import "DBPrivacyHelperDataSource.h" 5 | 6 | /** 7 | * Dismiss completion block 8 | */ 9 | typedef void (^DBPrivateHelperCompletionBlock)(); 10 | 11 | @interface DBPrivateHelperController : UIViewController 12 | 13 | /** 14 | * Set the status bar style 15 | */ 16 | @property (nonatomic, assign) UIStatusBarStyle statusBarStyle; 17 | 18 | /** 19 | * Set if the controller can rotate 20 | */ 21 | @property (nonatomic, assign) BOOL canRotate; 22 | 23 | /** 24 | * The close button 25 | */ 26 | @property (nonatomic, readonly) UIButton *closeButton; 27 | 28 | /** 29 | * The snapshot of the window 30 | */ 31 | @property (nonatomic, strong) UIImage *snapshot; 32 | 33 | /** 34 | * Personal App Icon name for DBPrivacyTypeNotifications 35 | */ 36 | @property (nonatomic, strong) NSString *appIcon; 37 | 38 | /** 39 | * The dismiss completion block 40 | */ 41 | @property (nonatomic, copy) DBPrivateHelperCompletionBlock didDismissViewController; 42 | 43 | /** 44 | * Create an instance of DBPrivateHelperController 45 | * 46 | * @param type The privacy type 47 | * 48 | * @return An instance of DBPrivateHelperController 49 | */ 50 | + (instancetype) helperForType:(DBPrivacyType)type; 51 | @end -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/UIViewController+DBPrivacyHelper.h: -------------------------------------------------------------------------------- 1 | 2 | #import "DBPrivateHelperController.h" 3 | 4 | @interface UIViewController (DBPrivacyHelper) 5 | /** 6 | * Personal App Icon name for DBPrivacyTypeNotifications 7 | */ 8 | @property (nonatomic, strong) NSString *appIcon; 9 | 10 | /** 11 | * Show the privacy helper 12 | * 13 | * @param type The type of privacy 14 | */ 15 | - (void) showPrivacyHelperForType:(DBPrivacyType)type; 16 | 17 | /** 18 | * Show the privacy helper with customization data 19 | * 20 | * @param type The type of privacy 21 | * @param controllerBlock Customize the DBPrivateHelperController view controller 22 | * @param didPresent Customize the completion block of presentViewController:animated:completion: 23 | * @param didDismiss Customize the completion block of dismissViewControllerAnimated:completion: 24 | * @param defaultSettingPane If NO force to use DBPrivateHelperController instead of the default settings pane on iOS 8. Only for iOS 8. Default value is YES. 25 | */ 26 | - (void) showPrivacyHelperForType:(DBPrivacyType)type controller:(void(^)(DBPrivateHelperController *vc))controllerBlock 27 | didPresent:(DBPrivateHelperCompletionBlock)didPresent 28 | didDismiss:(DBPrivateHelperCompletionBlock)didDismiss 29 | useDefaultSettingPane:(BOOL)defaultSettingPane; 30 | /** 31 | * Snapshot of your Window 32 | * 33 | * @return An UIImage of your Window 34 | */ 35 | - (UIImage *) snapshot; 36 | @end -------------------------------------------------------------------------------- /Dependencies/DBPrivacyHelper/UIViewController+DBPrivacyHelper.m: -------------------------------------------------------------------------------- 1 | 2 | #import "UIViewController+DBPrivacyHelper.h" 3 | #import 4 | 5 | @implementation UIViewController (DBPrivacyHelper) 6 | 7 | - (void) showPrivacyHelperForType:(DBPrivacyType)type 8 | { 9 | [self showPrivacyHelperForType:type controller:nil didPresent:nil didDismiss:nil useDefaultSettingPane:YES]; 10 | } 11 | 12 | - (void) showPrivacyHelperForType:(DBPrivacyType)type controller:(void(^)(DBPrivateHelperController *vc))controllerBlock 13 | didPresent:(DBPrivateHelperCompletionBlock)didPresent 14 | didDismiss:(DBPrivateHelperCompletionBlock)didDismiss 15 | useDefaultSettingPane:(BOOL)defaultSettingPane 16 | { 17 | 18 | if ( IS_IOS_8 && defaultSettingPane) 19 | { 20 | if ( UIApplicationOpenSettingsURLString ) 21 | { 22 | NSURL *appSettings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 23 | [[UIApplication sharedApplication] openURL:appSettings]; 24 | return; 25 | } 26 | } 27 | 28 | DBPrivateHelperController *vc = [DBPrivateHelperController helperForType:type]; 29 | vc.appIcon = self.appIcon; 30 | vc.didDismissViewController = didDismiss; 31 | vc.snapshot = [self snapshot]; 32 | vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 33 | 34 | if ( controllerBlock ) 35 | { 36 | controllerBlock(vc); 37 | } 38 | 39 | [self presentViewController:vc animated:YES completion:didPresent]; 40 | } 41 | 42 | - (UIImage *) snapshot 43 | { 44 | id appDelegate = [[UIApplication sharedApplication] delegate]; 45 | 46 | UIGraphicsBeginImageContextWithOptions(appDelegate.window.bounds.size, NO, appDelegate.window.screen.scale); 47 | 48 | [appDelegate.window drawViewHierarchyInRect:appDelegate.window.bounds afterScreenUpdates:NO]; 49 | 50 | UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext(); 51 | 52 | UIGraphicsEndImageContext(); 53 | 54 | return snapshotImage; 55 | } 56 | 57 | - (void) setAppIcon:(NSString *)appIcon 58 | { 59 | objc_setAssociatedObject(self, @"kAppIcon", appIcon, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 60 | } 61 | 62 | - (NSString *) appIcon 63 | { 64 | return objc_getAssociatedObject(self, @"kAppIcon"); 65 | } 66 | 67 | @end -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKAppSettingsViewController.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | #import 19 | 20 | #import "IASKSettingsStore.h" 21 | #import "IASKViewController.h" 22 | #import "IASKSpecifier.h" 23 | 24 | @class IASKSettingsReader; 25 | @class IASKAppSettingsViewController; 26 | 27 | @protocol IASKSettingsDelegate 28 | - (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController*)sender; 29 | 30 | @optional 31 | #pragma mark - UITableView header customization 32 | - (CGFloat) settingsViewController:(id)settingsViewController 33 | tableView:(UITableView *)tableView 34 | heightForHeaderForSection:(NSInteger)section; 35 | - (UIView *) settingsViewController:(id)settingsViewController 36 | tableView:(UITableView *)tableView 37 | viewForHeaderForSection:(NSInteger)section; 38 | 39 | #pragma mark - UITableView cell customization 40 | - (CGFloat)tableView:(UITableView*)tableView heightForSpecifier:(IASKSpecifier*)specifier; 41 | - (UITableViewCell*)tableView:(UITableView*)tableView cellForSpecifier:(IASKSpecifier*)specifier; 42 | 43 | #pragma mark - mail composing customization 44 | - (NSString*) settingsViewController:(id)settingsViewController 45 | mailComposeBodyForSpecifier:(IASKSpecifier*) specifier; 46 | 47 | - (UIViewController*) settingsViewController:(id)settingsViewController 48 | viewControllerForMailComposeViewForSpecifier:(IASKSpecifier*) specifier; 49 | 50 | - (void) settingsViewController:(id) settingsViewController 51 | mailComposeController:(MFMailComposeViewController*)controller 52 | didFinishWithResult:(MFMailComposeResult)result 53 | error:(NSError*)error; 54 | 55 | #pragma mark - respond to button taps 56 | - (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForKey:(NSString*)key __attribute__((deprecated)); // use the method below with specifier instead 57 | - (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForSpecifier:(IASKSpecifier*)specifier; 58 | - (void)settingsViewController:(IASKAppSettingsViewController*)sender tableView:(UITableView *)tableView didSelectCustomViewSpecifier:(IASKSpecifier*)specifier; 59 | @end 60 | 61 | 62 | @interface IASKAppSettingsViewController : UITableViewController 63 | 64 | @property (nonatomic, assign) IBOutlet id delegate; 65 | @property (nonatomic, copy) NSString *file; 66 | @property (nonatomic, assign) BOOL showCreditsFooter; 67 | @property (nonatomic, assign) IBInspectable BOOL showDoneButton; 68 | @property (nonatomic, retain) NSSet *hiddenKeys; 69 | @property (nonatomic) IBInspectable BOOL neverShowPrivacySettings; 70 | 71 | - (void)synchronizeSettings; 72 | - (void)dismiss:(id)sender; 73 | - (void)setHiddenKeys:(NSSet*)hiddenKeys animated:(BOOL)animated; 74 | @end 75 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKAppSettingsWebViewController.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | #import 19 | #import "IASKSpecifier.h" 20 | 21 | @interface IASKAppSettingsWebViewController : UIViewController 22 | 23 | - (id)initWithFile:(NSString*)htmlFileName specifier:(IASKSpecifier*)specifier; 24 | 25 | @property (nonatomic, strong) UIWebView *webView; 26 | @property (nonatomic, strong) NSURL *url; 27 | @property (nonatomic, strong) NSString *customTitle; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKMultipleValueSelection.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class IASKSpecifier; 4 | @protocol IASKSettingsStore; 5 | 6 | /// Encapsulates the selection among multiple values. 7 | /// This is used for PSMultiValueSpecifier and PSRadioGroupSpecifier 8 | @interface IASKMultipleValueSelection : NSObject 9 | 10 | @property (nonatomic, assign) UITableView *tableView; 11 | @property (nonatomic, retain) IASKSpecifier *specifier; 12 | @property (nonatomic, assign) NSInteger section; 13 | @property (nonatomic, copy, readonly) NSIndexPath *checkedItem; 14 | @property (nonatomic, strong) id settingsStore; 15 | 16 | - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath; 17 | - (void)updateSelectionInCell:(UITableViewCell *)cell indexPath:(NSIndexPath *)indexPath; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKMultipleValueSelection.m: -------------------------------------------------------------------------------- 1 | #import "IASKMultipleValueSelection.h" 2 | 3 | #import "IASKSettingsStore.h" 4 | #import "IASKSettingsStoreUserDefaults.h" 5 | #import "IASKSpecifier.h" 6 | #import "IASKSettingsReader.h" 7 | 8 | @implementation IASKMultipleValueSelection { 9 | NSInteger _checkedIndex; 10 | } 11 | 12 | @synthesize settingsStore = _settingsStore; 13 | 14 | - (void)dealloc { 15 | [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil]; 16 | } 17 | 18 | - (void)setSpecifier:(IASKSpecifier *)specifier { 19 | _specifier = specifier; 20 | [self updateCheckedItem]; 21 | } 22 | 23 | - (NSIndexPath *)checkedItem { 24 | return [NSIndexPath indexPathForRow:_checkedIndex inSection:_section];; 25 | } 26 | 27 | - (void)updateCheckedItem { 28 | // Find the currently checked item 29 | id value = [self.settingsStore objectForKey:[_specifier key]]; 30 | if (!value) { 31 | value = [_specifier defaultValue]; 32 | } 33 | _checkedIndex = [[_specifier multipleValues] indexOfObject:value]; 34 | } 35 | 36 | - (id)settingsStore { 37 | if (_settingsStore == nil) { 38 | self.settingsStore = [[IASKSettingsStoreUserDefaults alloc] init]; 39 | } 40 | return _settingsStore; 41 | } 42 | 43 | - (void)setSettingsStore:(id)settingsStore { 44 | if ([_settingsStore isKindOfClass:IASKSettingsStoreUserDefaults.class]) { 45 | IASKSettingsStoreUserDefaults *udSettingsStore = (id)_settingsStore; 46 | [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:udSettingsStore.defaults]; 47 | } 48 | 49 | _settingsStore = settingsStore; 50 | 51 | if ([settingsStore isKindOfClass:IASKSettingsStoreUserDefaults.class]) { 52 | IASKSettingsStoreUserDefaults *udSettingsStore = (id)settingsStore; 53 | [[NSNotificationCenter defaultCenter] addObserver:self 54 | selector:@selector(userDefaultsDidChange) 55 | name:NSUserDefaultsDidChangeNotification 56 | object:udSettingsStore.defaults]; 57 | } 58 | } 59 | 60 | #pragma mark - selection 61 | 62 | - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath { 63 | 64 | if (indexPath == self.checkedItem) { 65 | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 66 | return; 67 | } 68 | 69 | NSArray *values = [_specifier multipleValues]; 70 | 71 | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 72 | [self deselectCell:[self.tableView cellForRowAtIndexPath:self.checkedItem]]; 73 | [self selectCell:[self.tableView cellForRowAtIndexPath:indexPath]]; 74 | _checkedIndex = indexPath.row; 75 | 76 | [self.settingsStore setObject:[values objectAtIndex:indexPath.row] forKey:[_specifier key]]; 77 | [self.settingsStore synchronize]; 78 | [[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged 79 | object:[_specifier key] 80 | userInfo:@{ 81 | _specifier.key: values[indexPath.row] 82 | }]; 83 | }; 84 | 85 | - (void)updateSelectionInCell:(UITableViewCell *)cell indexPath:(NSIndexPath *)indexPath { 86 | if ([indexPath isEqual:self.checkedItem]) { 87 | [self selectCell:cell]; 88 | } else { 89 | [self deselectCell:cell]; 90 | } 91 | } 92 | 93 | - (void)selectCell:(UITableViewCell *)cell { 94 | [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 95 | IASK_IF_PRE_IOS7([[cell textLabel] setTextColor:kIASKgrayBlueColor];); 96 | } 97 | 98 | - (void)deselectCell:(UITableViewCell *)cell { 99 | [cell setAccessoryType:UITableViewCellAccessoryNone]; 100 | IASK_IF_PRE_IOS7([[cell textLabel] setTextColor:[UIColor darkTextColor]];); 101 | } 102 | 103 | 104 | #pragma mark Notifications 105 | 106 | - (void)userDefaultsDidChange { 107 | NSIndexPath *oldCheckedItem = self.checkedItem; 108 | if (_specifier) { 109 | [self updateCheckedItem]; 110 | } 111 | 112 | // only reload the table if it had changed; prevents animation cancellation 113 | if (![self.checkedItem isEqual:oldCheckedItem]) { 114 | [self.tableView reloadData]; 115 | } 116 | } 117 | 118 | @end 119 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSpecifierValuesViewController.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | #import "IASKSettingsStore.h" 19 | #import "IASKViewController.h" 20 | @class IASKSpecifier; 21 | @class IASKSettingsReader; 22 | 23 | @interface IASKSpecifierValuesViewController : UIViewController { 24 | UITableView *_tableView; 25 | 26 | IASKSpecifier *_currentSpecifier; 27 | IASKSettingsReader *_settingsReader; 28 | } 29 | 30 | @property (nonatomic, retain) UITableView *tableView; 31 | @property (nonatomic, retain) IASKSpecifier *currentSpecifier; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Controllers/IASKViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKAppSettingsViewController.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | @class IASKSettingsReader; 18 | @protocol IASKSettingsStore; 19 | 20 | // protocol all IASK view controllers implement 21 | @protocol IASKViewController 22 | 23 | @property (nonatomic, retain) IASKSettingsReader* settingsReader; 24 | @property (nonatomic, retain) id settingsStore; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStore.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStore.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import 19 | 20 | /** protocol that needs to be implemented from a settings store 21 | */ 22 | @protocol IASKSettingsStore 23 | @required 24 | - (void)setBool:(BOOL)value forKey:(NSString*)key; 25 | - (void)setFloat:(float)value forKey:(NSString*)key; 26 | - (void)setDouble:(double)value forKey:(NSString*)key; 27 | - (void)setInteger:(NSInteger)value forKey:(NSString*)key; 28 | - (void)setObject:(id)value forKey:(NSString*)key; 29 | - (BOOL)boolForKey:(NSString*)key; 30 | - (float)floatForKey:(NSString*)key; 31 | - (double)doubleForKey:(NSString*)key; 32 | - (NSInteger)integerForKey:(NSString*)key; 33 | - (id)objectForKey:(NSString*)key; 34 | - (BOOL)synchronize; // Write settings to a permanant storage. Returns YES on success, NO otherwise 35 | @end 36 | 37 | 38 | /** abstract default implementation of IASKSettingsStore protocol 39 | 40 | helper to implement a store which maps all methods to setObject:forKey: 41 | and objectForKey:. Those 2 methods need to be overwritten. 42 | */ 43 | @interface IASKAbstractSettingsStore : NSObject 44 | 45 | /** default implementation raises an exception 46 | must be overridden by subclasses 47 | */ 48 | - (void)setObject:(id)value forKey:(NSString*)key; 49 | 50 | /** default implementation raises an exception 51 | must be overridden by subclasses 52 | */ 53 | - (id)objectForKey:(NSString*)key; 54 | 55 | /** default implementation does nothing and returns NO 56 | */ 57 | - (BOOL)synchronize; 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStore.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStore.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import "IASKSettingsStore.h" 19 | 20 | @implementation IASKAbstractSettingsStore 21 | 22 | - (void)setObject:(id)value forKey:(NSString*)key { 23 | [NSException raise:@"Unimplemented" 24 | format:@"setObject:forKey: must be implemented in subclasses of IASKAbstractSettingsStore"]; 25 | } 26 | 27 | - (id)objectForKey:(NSString*)key { 28 | [NSException raise:@"Unimplemented" 29 | format:@"objectForKey: must be implemented in subclasses of IASKAbstractSettingsStore"]; 30 | return nil; 31 | } 32 | 33 | - (void)setBool:(BOOL)value forKey:(NSString*)key { 34 | [self setObject:[NSNumber numberWithBool:value] forKey:key]; 35 | } 36 | 37 | - (void)setFloat:(float)value forKey:(NSString*)key { 38 | [self setObject:[NSNumber numberWithFloat:value] forKey:key]; 39 | } 40 | 41 | - (void)setInteger:(NSInteger)value forKey:(NSString*)key { 42 | [self setObject:[NSNumber numberWithInteger:value] forKey:key]; 43 | } 44 | 45 | - (void)setDouble:(double)value forKey:(NSString*)key { 46 | [self setObject:[NSNumber numberWithDouble:value] forKey:key]; 47 | } 48 | 49 | - (BOOL)boolForKey:(NSString*)key { 50 | return [[self objectForKey:key] boolValue]; 51 | } 52 | 53 | - (float)floatForKey:(NSString*)key { 54 | return [[self objectForKey:key] floatValue]; 55 | } 56 | - (NSInteger)integerForKey:(NSString*)key { 57 | return [[self objectForKey:key] integerValue]; 58 | } 59 | 60 | - (double)doubleForKey:(NSString*)key { 61 | return [[self objectForKey:key] doubleValue]; 62 | } 63 | 64 | - (BOOL)synchronize { 65 | return NO; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStoreFile.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStoreFile.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import 19 | #import "IASKSettingsStore.h" 20 | 21 | /** file-based implementation of IASKAbstractSettingsStore 22 | 23 | uses an NSDictionary + its read/write to file support to store 24 | settings in a file at the specified path 25 | */ 26 | @interface IASKSettingsStoreFile : IASKAbstractSettingsStore 27 | 28 | /** designated initializer 29 | 30 | @param path absolute file-path to store settings dictionary 31 | */ 32 | - (id)initWithPath:(NSString*)path; 33 | 34 | @property (nonatomic, copy, readonly) NSString* filePath; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStoreFile.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStoreFile.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import "IASKSettingsStoreFile.h" 19 | 20 | @interface IASKSettingsStoreFile() { 21 | NSMutableDictionary * _dict; 22 | } 23 | 24 | @end 25 | 26 | @implementation IASKSettingsStoreFile 27 | 28 | - (id)initWithPath:(NSString*)path { 29 | if((self = [super init])) { 30 | _filePath = [path copy]; 31 | _dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 32 | if(_dict == nil) { 33 | _dict = [[NSMutableDictionary alloc] init]; 34 | } 35 | } 36 | return self; 37 | } 38 | 39 | - (void)setObject:(id)value forKey:(NSString *)key { 40 | [_dict setObject:value forKey:key]; 41 | } 42 | 43 | - (id)objectForKey:(NSString *)key { 44 | return [_dict objectForKey:key]; 45 | } 46 | 47 | - (BOOL)synchronize { 48 | return [_dict writeToFile:_filePath atomically:YES]; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStoreUserDefaults.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import 19 | #import "IASKSettingsStore.h" 20 | 21 | /** implementation of IASKSettingsStore that uses NSUserDefaults 22 | */ 23 | @interface IASKSettingsStoreUserDefaults : NSObject 24 | 25 | ///designated initializer 26 | - (id) initWithUserDefaults:(NSUserDefaults*) defaults; 27 | 28 | ///calls initWithUserDefaults: with [NSUserDefaults standardUserDefaults] 29 | - (id) init; 30 | 31 | @property (nonatomic, retain, readonly) NSUserDefaults* defaults; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSettingsStoreUserDefaults.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com 9 | // All rights reserved. 10 | // 11 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 12 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 13 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 14 | // 15 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 16 | // 17 | 18 | #import "IASKSettingsStoreUserDefaults.h" 19 | 20 | @interface IASKSettingsStoreUserDefaults () 21 | 22 | @property (nonatomic, retain, readwrite) NSUserDefaults* defaults; 23 | 24 | @end 25 | 26 | @implementation IASKSettingsStoreUserDefaults 27 | 28 | - (id)initWithUserDefaults:(NSUserDefaults *)defaults { 29 | self = [super init]; 30 | if( self ) { 31 | _defaults = defaults; 32 | } 33 | return self; 34 | } 35 | 36 | - (id)init { 37 | return [self initWithUserDefaults:[NSUserDefaults standardUserDefaults]]; 38 | } 39 | 40 | - (void)setBool:(BOOL)value forKey:(NSString*)key { 41 | [self.defaults setBool:value forKey:key]; 42 | } 43 | 44 | - (void)setFloat:(float)value forKey:(NSString*)key { 45 | [self.defaults setFloat:value forKey:key]; 46 | } 47 | 48 | - (void)setDouble:(double)value forKey:(NSString*)key { 49 | [self.defaults setDouble:value forKey:key]; 50 | } 51 | 52 | - (void)setInteger:(NSInteger)value forKey:(NSString*)key { 53 | [self.defaults setInteger:value forKey:key]; 54 | } 55 | 56 | - (void)setObject:(id)value forKey:(NSString*)key { 57 | [self.defaults setObject:value forKey:key]; 58 | } 59 | 60 | - (BOOL)boolForKey:(NSString*)key { 61 | return [self.defaults boolForKey:key]; 62 | } 63 | 64 | - (float)floatForKey:(NSString*)key { 65 | return [self.defaults floatForKey:key]; 66 | } 67 | 68 | - (double)doubleForKey:(NSString*)key { 69 | return [self.defaults doubleForKey:key]; 70 | } 71 | 72 | - (NSInteger)integerForKey:(NSString*)key { 73 | return [self.defaults integerForKey:key]; 74 | } 75 | 76 | - (id)objectForKey:(NSString*)key { 77 | return [self.defaults objectForKey:key]; 78 | } 79 | 80 | - (BOOL)synchronize { 81 | return [self.defaults synchronize]; 82 | } 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Models/IASKSpecifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSpecifier.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | #import 19 | 20 | @class IASKSettingsReader; 21 | 22 | @interface IASKSpecifier : NSObject 23 | 24 | @property (nonatomic, retain) NSDictionary *specifierDict; 25 | @property (nonatomic, weak) IASKSettingsReader *settingsReader; 26 | 27 | - (id)initWithSpecifier:(NSDictionary*)specifier; 28 | /// A specifier for one entry in a radio group preceeded by a radio group specifier. 29 | - (id)initWithSpecifier:(NSDictionary *)specifier 30 | radioGroupValue:(NSString *)radioGroupValue; 31 | 32 | - (void)sortIfNeeded; 33 | 34 | - (NSString*)localizedObjectForKey:(NSString*)key; 35 | - (NSString*)title; 36 | - (NSString*)subtitle; 37 | - (NSString*)key; 38 | - (NSString*)type; 39 | - (NSString*)titleForCurrentValue:(id)currentValue; 40 | - (NSInteger)multipleValuesCount; 41 | - (NSArray*)multipleValues; 42 | - (NSArray*)multipleTitles; 43 | - (NSString*)file; 44 | - (id)defaultValue; 45 | - (id)defaultStringValue; 46 | - (BOOL)defaultBoolValue; 47 | - (id)trueValue; 48 | - (id)falseValue; 49 | - (float)minimumValue; 50 | - (float)maximumValue; 51 | - (NSString*)minimumValueImage; 52 | - (NSString*)maximumValueImage; 53 | - (BOOL)isSecure; 54 | - (BOOL)displaySortedByTitle; 55 | - (UIKeyboardType)keyboardType; 56 | - (UITextAutocapitalizationType)autocapitalizationType; 57 | - (UITextAutocorrectionType)autoCorrectionType; 58 | - (NSString*)footerText; 59 | - (Class)viewControllerClass; 60 | - (SEL)viewControllerSelector; 61 | - (NSString*)viewControllerStoryBoardFile; 62 | - (NSString*)viewControllerStoryBoardID; 63 | - (Class)buttonClass; 64 | - (SEL)buttonAction; 65 | - (UIImage *)cellImage; 66 | - (UIImage *)highlightedCellImage; 67 | - (BOOL)adjustsFontSizeToFitWidth; 68 | - (NSTextAlignment)textAlignment; 69 | - (NSArray *)userInterfaceIdioms; 70 | - (NSString *)radioGroupValue; 71 | @end 72 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/Base.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacy"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/de.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Datenschutz"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = "In “Einstellungen” App öffnen"; // iOS 8+ Privacy cell: subtitle 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/el.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Απόρρητο"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/en.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacy"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = "Open in “Settings” app"; // iOS 8+ Privacy cell: subtitle 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/es.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacidad"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO!) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/fr.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Confidentialité"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO!) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/it.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacy"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/ja.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "プライバシー"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/nl.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacy"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/pt-PT.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacidade"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/pt.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Privacidade"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/ru.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Приватность"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/sv.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Integritetsskydd"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/th.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "ความเป็นส่วนตัว"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Resources/tr.lproj/IASKLocalizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | IASKLocalizable.strings 3 | Where To 4 | 5 | Created by Ortwin Gentz on 20.10.14. 6 | Copyright (c) 2014 FutureTap. All rights reserved. 7 | */ 8 | 9 | 10 | "Privacy" = "Gizlilik"; // iOS 8+ Privacy cell: title 11 | "Open in Settings app" = ""; // iOS 8+ Privacy cell: subtitle (TODO) 12 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Settings.bundle/Root.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | Title 9 | VideoOutput 10 | Type 11 | PSGroupSpecifier 12 | 13 | 14 | DefaultValue 15 | 16 | Key 17 | ShouldDisplayInnerBorder 18 | Title 19 | VideoBorder 20 | Type 21 | PSToggleSwitchSpecifier 22 | 23 | 24 | StringsTable 25 | Root 26 | 27 | 28 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Settings.bundle/en.lproj/Root.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/InAppSettingsKit/Settings.bundle/en.lproj/Root.strings -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Settings.bundle/zh-Hans.lproj/Root.strings: -------------------------------------------------------------------------------- 1 | 2 | "Settings" = "设置"; 3 | 4 | "VideoOutput" = "视频输出"; 5 | "VideoBorder" = "视频边框"; 6 | "WaveMirror" = "水波影像效果"; 7 | "VideoCrop" = "视频剪裁"; 8 | 9 | "CircleFrame" = "圆形边框"; 10 | 11 | "Demo" = "演示"; 12 | "DemoButton" = "示例按钮"; 13 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKPSSliderSpecifierViewCell.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | 19 | @class IASKSlider; 20 | 21 | @interface IASKPSSliderSpecifierViewCell : UITableViewCell 22 | 23 | @property (nonatomic, strong) IASKSlider *slider; 24 | @property (nonatomic, strong) UIImageView *minImage; 25 | @property (nonatomic, strong) UIImageView *maxImage; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKPSSliderSpecifierViewCell.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009-2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import "IASKPSSliderSpecifierViewCell.h" 18 | #import "IASKSlider.h" 19 | #import "IASKSettingsReader.h" 20 | 21 | @implementation IASKPSSliderSpecifierViewCell 22 | 23 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 24 | { 25 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 26 | if (self) { 27 | // Setting only frame data that will not be overwritten by layoutSubviews 28 | // Slider 29 | _slider = [[IASKSlider alloc] initWithFrame:CGRectMake(0, 0, 0, 23)]; 30 | _slider.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | 31 | UIViewAutoresizingFlexibleWidth; 32 | _slider.continuous = NO; 33 | [self.contentView addSubview:_slider]; 34 | 35 | // MinImage 36 | _minImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 21, 21)]; 37 | _minImage.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 38 | UIViewAutoresizingFlexibleBottomMargin; 39 | [self.contentView addSubview:_minImage]; 40 | 41 | // MaxImage 42 | _maxImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 21, 21)]; 43 | _maxImage.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | 44 | UIViewAutoresizingFlexibleBottomMargin; 45 | [self.contentView addSubview:_maxImage]; 46 | 47 | self.selectionStyle = UITableViewCellSelectionStyleNone; 48 | } 49 | return self; 50 | } 51 | 52 | - (void)layoutSubviews { 53 | [super layoutSubviews]; 54 | 55 | UIEdgeInsets padding = (UIEdgeInsets) { 0, kIASKPaddingLeft, 0, kIASKPaddingRight }; 56 | if ([self respondsToSelector:@selector(layoutMargins)]) { 57 | padding = [self layoutMargins]; 58 | } 59 | CGRect sliderBounds = _slider.bounds; 60 | CGPoint sliderCenter = _slider.center; 61 | const CGFloat superViewWidth = _slider.superview.frame.size.width; 62 | 63 | sliderBounds.size.width = superViewWidth - (padding.left + padding.right); 64 | sliderCenter.x = padding.left + sliderBounds.size.width / 2; 65 | sliderCenter.y = self.contentView.center.y; 66 | _minImage.hidden = YES; 67 | _maxImage.hidden = YES; 68 | 69 | // Check if there are min and max images. If so, change the layout accordingly. 70 | if (_minImage.image) { 71 | // Min image 72 | _minImage.hidden = NO; 73 | sliderBounds.size.width -= _minImage.frame.size.width + kIASKSliderImageGap; 74 | sliderCenter.x += (_minImage.frame.size.width + kIASKSliderImageGap) / 2; 75 | _minImage.center = CGPointMake(_minImage.frame.size.width / 2 + padding.left, 76 | self.contentView.center.y); 77 | } 78 | if (_maxImage.image) { 79 | // Max image 80 | _maxImage.hidden = NO; 81 | sliderBounds.size.width -= kIASKSliderImageGap + _maxImage.frame.size.width; 82 | sliderCenter.x -= (kIASKSliderImageGap + _maxImage.frame.size.width) / 2; 83 | _maxImage.center = CGPointMake(superViewWidth - padding.right - _maxImage.frame.size.width /2, self.contentView.center.y ); 84 | } 85 | 86 | _slider.bounds = sliderBounds; 87 | _slider.center = sliderCenter; 88 | } 89 | 90 | - (void)prepareForReuse { 91 | [super prepareForReuse]; 92 | _minImage.image = nil; 93 | _maxImage.image = nil; 94 | } 95 | @end 96 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKPSTextFieldSpecifierViewCell.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | 19 | @class IASKTextField; 20 | 21 | @interface IASKPSTextFieldSpecifierViewCell : UITableViewCell 22 | 23 | @property (nonatomic, strong) IASKTextField *textField; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKPSTextFieldSpecifierViewCell.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009-2010: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import "IASKPSTextFieldSpecifierViewCell.h" 18 | #import "IASKTextField.h" 19 | #import "IASKSettingsReader.h" 20 | 21 | @implementation IASKPSTextFieldSpecifierViewCell 22 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 23 | { 24 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 25 | if (self) { 26 | self.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin; 27 | 28 | // TextField 29 | _textField = [[IASKTextField alloc] initWithFrame:CGRectMake(0, 0, 200, self.frame.size.height)]; 30 | _textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin; 31 | _textField.font = [UIFont systemFontOfSize:kIASKLabelFontSize]; 32 | _textField.minimumFontSize = kIASKMinimumFontSize; 33 | IASK_IF_PRE_IOS7(_textField.textColor = [UIColor colorWithRed:0.275f green:0.376f blue:0.522f alpha:1.000f];); 34 | [self.contentView addSubview:_textField]; 35 | 36 | self.selectionStyle = UITableViewCellSelectionStyleNone; 37 | } 38 | return self; 39 | } 40 | 41 | - (void)layoutSubviews { 42 | [super layoutSubviews]; 43 | 44 | UIEdgeInsets padding = (UIEdgeInsets) { 0, kIASKPaddingLeft, 0, kIASKPaddingRight }; 45 | if ([self respondsToSelector:@selector(layoutMargins)]) { 46 | padding = [self layoutMargins]; 47 | } 48 | 49 | // Label 50 | CGFloat imageOffset = self.imageView.image ? self.imageView.bounds.size.width + padding.left : 0; 51 | CGSize labelSize = [self.textLabel sizeThatFits:CGSizeZero]; 52 | labelSize.width = MAX(labelSize.width, kIASKMinLabelWidth - imageOffset); 53 | self.textLabel.frame = (CGRect){self.textLabel.frame.origin, {MIN(kIASKMaxLabelWidth, labelSize.width), self.textLabel.frame.size.height}} ; 54 | 55 | // TextField 56 | _textField.center = CGPointMake(_textField.center.x, self.contentView.center.y); 57 | CGRect textFieldFrame = _textField.frame; 58 | textFieldFrame.origin.x = self.textLabel.frame.origin.x + MAX(kIASKMinLabelWidth - imageOffset, self.textLabel.frame.size.width) + kIASKSpacing; 59 | textFieldFrame.size.width = _textField.superview.frame.size.width - textFieldFrame.origin.x - padding.right; 60 | 61 | if (!self.textLabel.text.length) { 62 | textFieldFrame.origin.x = padding.left + imageOffset; 63 | textFieldFrame.size.width = self.contentView.bounds.size.width - padding.left - padding.right - imageOffset; 64 | } else if (_textField.textAlignment == NSTextAlignmentRight) { 65 | textFieldFrame.origin.x = self.textLabel.frame.origin.x + labelSize.width + kIASKSpacing; 66 | textFieldFrame.size.width = _textField.superview.frame.size.width - textFieldFrame.origin.x - padding.right; 67 | } 68 | _textField.frame = textFieldFrame; 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSlider.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | 19 | 20 | @interface IASKSlider : UISlider 21 | 22 | @property (nonatomic, copy) NSString *key; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKSlider.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSlider.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import "IASKSlider.h" 18 | 19 | 20 | @implementation IASKSlider 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKSwitch.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSwitch.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | 19 | 20 | @interface IASKSwitch : UISwitch 21 | 22 | @property (nonatomic, copy) NSString *key; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKSwitch.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKSwitch.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import "IASKSwitch.h" 18 | 19 | 20 | @implementation IASKSwitch 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // IASKTextField.h 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import 18 | 19 | 20 | @interface IASKTextField : UITextField 21 | 22 | @property (nonatomic, copy) NSString *key; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Dependencies/InAppSettingsKit/Views/IASKTextField.m: -------------------------------------------------------------------------------- 1 | // 2 | // IASKTextField.m 3 | // http://www.inappsettingskit.com 4 | // 5 | // Copyright (c) 2009: 6 | // Luc Vandal, Edovia Inc., http://www.edovia.com 7 | // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com 8 | // All rights reserved. 9 | // 10 | // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, 11 | // as the original authors of this code. You can give credit in a blog post, a tweet or on 12 | // a info page of your app. Also, the original authors appreciate letting them know if you use this code. 13 | // 14 | // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php 15 | // 16 | 17 | #import "IASKTextField.h" 18 | 19 | 20 | @implementation IASKTextField 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Dependencies/KGModal/KGModal.h: -------------------------------------------------------------------------------- 1 | // 2 | // KGModal.h 3 | // KGModal 4 | // 5 | // Created by David Keegan on 10/5/12. 6 | // Copyright (c) 2012 David Keegan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString *const KGModalWillShowNotification; 12 | extern NSString *const KGModalDidShowNotification; 13 | extern NSString *const KGModalWillHideNotification; 14 | extern NSString *const KGModalDidHideNotification; 15 | 16 | typedef NS_ENUM(NSUInteger, KGModalBackgroundDisplayStyle){ 17 | KGModalBackgroundDisplayStyleGradient, 18 | KGModalBackgroundDisplayStyleSolid 19 | }; 20 | 21 | typedef NS_ENUM(NSUInteger, KGModalCloseButtonType){ 22 | KGModalCloseButtonTypeNone, 23 | KGModalCloseButtonTypeLeft, 24 | KGModalCloseButtonTypeRight 25 | }; 26 | 27 | @interface KGModal : NSObject 28 | 29 | // Determines if the modal should dismiss if the user taps outside of the modal view 30 | // Defaults to YES 31 | @property (nonatomic) BOOL tapOutsideToDismiss; 32 | 33 | // Determines if the close button or tapping outside the modal should animate the dismissal 34 | // Defaults to YES 35 | @property (nonatomic) BOOL animateWhenDismissed; 36 | 37 | // Determins close button type (None/Left/Right) 38 | // Defaults to Left 39 | @property (nonatomic) KGModalCloseButtonType closeButtonType; 40 | 41 | // The background color of the modal window 42 | // Defaults black with 0.5 opacity 43 | @property (strong, nonatomic) UIColor *modalBackgroundColor; 44 | 45 | // The background display style, can be a transparent radial gradient or a transparent black 46 | // Defaults to gradient, this looks better but takes a bit more time to display on the retina iPad 47 | @property (nonatomic) KGModalBackgroundDisplayStyle backgroundDisplayStyle; 48 | 49 | // Determines if the modal should rotate when the device rotates 50 | // Defaults to YES, only applies to iOS5 51 | @property (nonatomic) BOOL shouldRotate; 52 | 53 | // The shared instance of the modal 54 | + (instancetype)sharedInstance; 55 | 56 | // Set the content view to display in the modal and display with animations 57 | - (void)showWithContentView:(UIView *)contentView; 58 | 59 | // Set the content view to display in the modal and whether the modal should animate in 60 | - (void)showWithContentView:(UIView *)contentView andAnimated:(BOOL)animated; 61 | 62 | // Set the content view controller to display in the modal and display with animations 63 | - (void)showWithContentViewController:(UIViewController *)contentViewController; 64 | 65 | // Set the content view controller to display in the modal and whether the modal should animate in 66 | - (void)showWithContentViewController:(UIViewController *)contentViewController andAnimated:(BOOL)animated; 67 | 68 | // Hide the modal with animations 69 | - (void)hide; 70 | 71 | // Hide the modal with animations, 72 | // run the completion after the modal is hidden 73 | - (void)hideWithCompletionBlock:(void(^)())completion; 74 | 75 | // Hide the modal and whether the modal should animate away 76 | - (void)hideAnimated:(BOOL)animated; 77 | 78 | // Hide the modal and whether the modal should animate away, 79 | // run the completion after the modal is hidden 80 | - (void)hideAnimated:(BOOL)animated withCompletionBlock:(void(^)())completion; 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /Dependencies/MBProgressHUD/SNLoading.h: -------------------------------------------------------------------------------- 1 | 2 | @interface SNLoading : NSObject 3 | 4 | + (void)showWithTitle:(NSString *)title; 5 | + (void)hideWithTitle:(NSString *)title; 6 | 7 | + (void)updateWithTitle:(NSString *)title detailsText:(NSString *)detailsText; 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Dependencies/MBProgressHUD/SNLoading.m: -------------------------------------------------------------------------------- 1 | 2 | #import "SNLoading.h" 3 | #import "MBProgressHUD.h" 4 | 5 | static MBProgressHUD *progressHud = nil; 6 | 7 | @implementation SNLoading 8 | 9 | + (void)showWithTitle:(NSString *)title 10 | { 11 | if (!progressHud) 12 | { 13 | [progressHud removeFromSuperview]; 14 | progressHud = nil; 15 | } 16 | 17 | UIWindow *window = [UIApplication sharedApplication].keyWindow; 18 | progressHud = [[MBProgressHUD alloc] initWithWindow:window]; 19 | progressHud.labelText = title ? title : GBLocalizedString(@"Loading"); 20 | progressHud.removeFromSuperViewOnHide = YES; 21 | [window addSubview:progressHud]; 22 | [progressHud show:YES]; 23 | 24 | [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 25 | } 26 | 27 | + (void)hideWithTitle:(NSString *)title 28 | { 29 | progressHud.labelText = title ? title : GBLocalizedString(@"Loaded"); 30 | [progressHud hide:YES]; 31 | 32 | [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 33 | } 34 | 35 | + (void)updateWithTitle:(NSString *)title detailsText:(NSString *)detailsText 36 | { 37 | progressHud.labelText = title ? title : GBLocalizedString(@"Loading"); 38 | progressHud.detailsLabelText = detailsText; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Dependencies/StickerView/CircleView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @interface CircleView : UIView 5 | 6 | @property (nonatomic, strong) UIColor *color; 7 | @property (nonatomic, assign) CGFloat radius; 8 | 9 | @property (nonatomic, strong) UIColor *borderColor; 10 | @property (nonatomic, assign) CGFloat borderWidth; 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /Dependencies/StickerView/CircleView.m: -------------------------------------------------------------------------------- 1 | 2 | #import "CircleView.h" 3 | 4 | @implementation CircleView 5 | 6 | - (id)initWithFrame:(CGRect)frame 7 | { 8 | self = [super initWithFrame:frame]; 9 | 10 | if (self) 11 | { 12 | self.backgroundColor = [UIColor clearColor]; 13 | 14 | self.color = [UIColor blackColor]; 15 | self.radius = 1; 16 | 17 | self.borderColor = [UIColor clearColor]; 18 | self.borderWidth = 0; 19 | } 20 | return self; 21 | } 22 | 23 | - (void)drawRect:(CGRect)rect 24 | { 25 | CGContextRef context = UIGraphicsGetCurrentContext(); 26 | 27 | CGRect rct = self.bounds; 28 | rct.origin.x = 0.5 * (rct.size.width - self.radius * rct.size.width); 29 | rct.origin.y = 0.5 * (rct.size.height - self.radius * rct.size.height); 30 | rct.size.width = self.radius * rct.size.width; 31 | rct.size.height = self.radius * rct.size.height; 32 | 33 | CGContextSetFillColorWithColor(context, self.color.CGColor); 34 | CGContextFillEllipseInRect(context, rct); 35 | 36 | CGContextSetStrokeColorWithColor(context, self.borderColor.CGColor); 37 | CGContextSetLineWidth(context, self.borderWidth); 38 | CGContextStrokeEllipseInRect(context, rct); 39 | } 40 | 41 | - (void)setColor:(UIColor *)color 42 | { 43 | if(color != _color) 44 | { 45 | _color = color; 46 | [self setNeedsDisplay]; 47 | } 48 | } 49 | 50 | - (void)setBorderColor:(UIColor *)borderColor 51 | { 52 | if(borderColor != _borderColor) 53 | { 54 | _borderColor = borderColor; 55 | [self setNeedsDisplay]; 56 | } 57 | } 58 | 59 | - (void)setBorderWidth:(CGFloat)borderWidth 60 | { 61 | if(borderWidth != _borderWidth) 62 | { 63 | _borderWidth = borderWidth; 64 | [self setNeedsDisplay]; 65 | } 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Dependencies/StickerView/GIFImageView.h: -------------------------------------------------------------------------------- 1 | 2 | @interface GIFImageView : UIImageView 3 | 4 | @property (nonatomic, strong) NSString *gifPath; 5 | @property (nonatomic, strong) NSData *gifData; 6 | 7 | - (void)startGIF; 8 | - (void)startGIFWithRunLoopMode:(NSString * const)runLoopMode; 9 | - (void)stopGIF; 10 | - (BOOL)isGIFPlaying; 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /Dependencies/StickerView/ScrollSelectView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @protocol ScrollSelectViewDelegate; 5 | 6 | @interface ScrollSelectView : UIView 7 | 8 | @property (nonatomic, strong) UIScrollView *ContentView; 9 | @property (nonatomic, assign) id delegateSelect; 10 | @property (nonatomic, assign) NSInteger selectStyleIndex; 11 | 12 | - (id)initWithFrameFromGif:(CGRect)frame; 13 | 14 | + (void)getDefaultFilelist; 15 | 16 | @end 17 | 18 | @protocol ScrollSelectViewDelegate 19 | 20 | @optional 21 | - (void)didSelectedGifIndex:(NSInteger)styleIndex; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Dependencies/StickerView/ScrollSelectView.m: -------------------------------------------------------------------------------- 1 | 2 | #import "ScrollSelectView.h" 3 | 4 | static NSMutableDictionary *filenameDic; 5 | 6 | @interface ScrollSelectView() 7 | 8 | @property (nonatomic, strong) UIButton *selectedViewBtn; 9 | 10 | @end 11 | 12 | @implementation ScrollSelectView 13 | 14 | #pragma mark - Sticker 15 | - (id)initWithFrameFromGif:(CGRect)frame 16 | { 17 | self = [super initWithFrame:frame]; 18 | 19 | if (self) 20 | { 21 | // Initialization code 22 | [self initResourceFormGif]; 23 | } 24 | return self; 25 | } 26 | 27 | - (void)initResourceFormGif 28 | { 29 | _ContentView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 50)]; 30 | [_ContentView setBackgroundColor:[[UIColor grayColor] colorWithAlphaComponent:0.6]]; 31 | _ContentView.showsHorizontalScrollIndicator = NO; 32 | _ContentView.showsVerticalScrollIndicator = NO; 33 | [self addSubview:_ContentView]; 34 | 35 | // Get files count from resource 36 | NSString *filename = @"gif"; 37 | NSArray *fileList = [filenameDic objectForKey:filename]; 38 | NSLog(@"fileList: %@, Count: %lu", fileList, (unsigned long)[fileList count]); 39 | 40 | unsigned long gifCount = [fileList count]; 41 | CGFloat width = 116/2.0f; 42 | CGFloat height = 100/2.0f; 43 | for (int i = 0; i < gifCount; i++) 44 | { 45 | UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(i*width+(width-37)/2.0f, 2.5f, 45, 45)]; 46 | 47 | NSString *name = [NSString stringWithFormat:@"gif_%i.gif", i+1]; 48 | NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:nil]; 49 | UIImage *img = [[UIImage alloc] initWithContentsOfFile:path]; 50 | [button setImage:img forState:UIControlStateNormal]; 51 | 52 | UIEdgeInsets insets = {3, 3, 3, 3}; 53 | [button setImageEdgeInsets:insets]; 54 | 55 | [button setBackgroundImage:[UIImage imageNamed:@"selected"] forState:UIControlStateSelected]; 56 | [button addTarget:self action:@selector(gifAction:) forControlEvents:UIControlEventTouchUpInside]; 57 | [button setTag:i+1]; 58 | [_ContentView addSubview:button]; 59 | 60 | if (i == 0) 61 | { 62 | [button setSelected:YES]; 63 | _selectedViewBtn = button; 64 | } 65 | } 66 | 67 | [_ContentView setContentSize:CGSizeMake(gifCount*width, height)]; 68 | } 69 | 70 | - (void)gifAction:(id)sender 71 | { 72 | UIButton *button = (UIButton *)sender; 73 | if (button == _selectedViewBtn) 74 | { 75 | return; 76 | } 77 | 78 | self.selectStyleIndex = button.tag; 79 | [_selectedViewBtn setSelected:NO]; 80 | _selectedViewBtn = button; 81 | [_selectedViewBtn setSelected:YES]; 82 | 83 | if (_delegateSelect && [_delegateSelect respondsToSelector:@selector(didSelectedGifIndex:)]) 84 | { 85 | [_delegateSelect didSelectedGifIndex:self.selectStyleIndex]; 86 | } 87 | } 88 | 89 | #pragma mark - Private Methods 90 | + (void)getDefaultFilelist 91 | { 92 | NSString *name = @"gif_1", *type = @"gif"; 93 | NSString *fileFullPath = [[NSBundle mainBundle] pathForResource:name ofType:type]; 94 | NSString *filePathWithoutName = [fileFullPath stringByDeletingLastPathComponent]; 95 | NSString *fileName = [fileFullPath lastPathComponent]; 96 | NSString *fileExt = [fileFullPath pathExtension]; 97 | NSLog(@"filePathWithoutName: %@, fileName: %@, fileExt: %@", filePathWithoutName, fileName, fileExt); 98 | 99 | NSString *filenameByGif = @"gif"; 100 | filenameDic = [NSMutableDictionary dictionaryWithCapacity:1]; 101 | [filenameDic setObject:getFilelistBySymbol(filenameByGif, filePathWithoutName) forKey:filenameByGif]; 102 | } 103 | 104 | @end 105 | -------------------------------------------------------------------------------- /Dependencies/StickerView/StickerView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import "UIView+Frame.h" 4 | #import "CircleView.h" 5 | 6 | @interface StickerView : UIView 7 | 8 | @property (copy, nonatomic) GenericCallback deleteFinishBlock; 9 | 10 | + (void)setActiveStickerView:(StickerView*)view; 11 | 12 | - (id)initWithFilePath:(NSString *)path; 13 | 14 | - (UIImageView*)imageView; 15 | - (id)initWithImage:(UIImage *)image; 16 | - (void)setScale:(CGFloat)scale; 17 | - (void)setScale:(CGFloat)scaleX andScaleY:(CGFloat)scaleY; 18 | 19 | - (CGRect)getInnerFrame; 20 | - (CGFloat)getRotateAngle; 21 | - (NSString *)getFilePath; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Dependencies/StickerView/UIView+Frame.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @interface UIView (Frame) 5 | 6 | @property (nonatomic) CGFloat top; 7 | @property (nonatomic) CGFloat bottom; 8 | @property (nonatomic) CGFloat right; 9 | @property (nonatomic) CGFloat left; 10 | 11 | @property (nonatomic) CGFloat width; 12 | @property (nonatomic) CGFloat height; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Dependencies/StickerView/UIView+Frame.m: -------------------------------------------------------------------------------- 1 | 2 | #import "UIView+Frame.h" 3 | 4 | @implementation UIView (Frame) 5 | 6 | - (CGFloat)top 7 | { 8 | return self.frame.origin.y; 9 | } 10 | 11 | - (void)setTop:(CGFloat)y 12 | { 13 | CGRect frame = self.frame; 14 | frame.origin.y = y; 15 | self.frame = frame; 16 | } 17 | 18 | - (CGFloat)right 19 | { 20 | return self.frame.origin.x + self.frame.size.width; 21 | } 22 | 23 | - (void)setRight:(CGFloat)right 24 | { 25 | CGRect frame = self.frame; 26 | frame.origin.x = right - self.frame.size.width; 27 | self.frame = frame; 28 | } 29 | 30 | - (CGFloat)bottom 31 | { 32 | return self.frame.origin.y + self.frame.size.height; 33 | } 34 | 35 | - (void)setBottom:(CGFloat)bottom 36 | { 37 | CGRect frame = self.frame; 38 | frame.origin.y = bottom - self.frame.size.height; 39 | self.frame = frame; 40 | } 41 | 42 | - (CGFloat)left 43 | { 44 | return self.frame.origin.x; 45 | } 46 | 47 | - (void)setLeft:(CGFloat)x 48 | { 49 | CGRect frame = self.frame; 50 | frame.origin.x = x; 51 | self.frame = frame; 52 | } 53 | 54 | - (CGFloat)width 55 | { 56 | return self.frame.size.width; 57 | } 58 | 59 | - (void)setWidth:(CGFloat)width 60 | { 61 | CGRect frame = self.frame; 62 | frame.size.width = width; 63 | self.frame = frame; 64 | } 65 | 66 | - (CGFloat)height 67 | { 68 | return self.frame.size.height; 69 | } 70 | 71 | - (void)setHeight:(CGFloat)height 72 | { 73 | CGRect frame = self.frame; 74 | frame.size.height = height; 75 | self.frame = frame; 76 | } 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /Dependencies/StickerView/VideoView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VideoView.h 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/31/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UIView+Frame.h" 11 | #import "CircleView.h" 12 | #import "PBJVideoPlayerController.h" 13 | 14 | @interface VideoView : UIView 15 | 16 | @property (copy, nonatomic) GenericCallback deleteFinishBlock; 17 | @property (nonatomic, strong) PBJVideoPlayerController *videoPlayerController1; 18 | 19 | + (void)setActiveVideoView:(VideoView*)view; 20 | 21 | - (id)initWithFilePath:(NSString *)path withViewController:(UIViewController *)controller; 22 | 23 | - (void)setScale:(CGFloat)scale; 24 | - (void)setScale:(CGFloat)scaleX andScaleY:(CGFloat)scaleY; 25 | 26 | - (CGRect)getInnerFrame; 27 | - (CGFloat)getRotateAngle; 28 | - (NSString *)getFilePath; 29 | 30 | - (void)setVideoContentRect:(CGRect)videoContent; 31 | - (CGRect)getVideoContentRect; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Dependencies/StickerView/selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/StickerView/selected.png -------------------------------------------------------------------------------- /Dependencies/StickerView/turnoff_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/StickerView/turnoff_icon.png -------------------------------------------------------------------------------- /Dependencies/VideoEffects/ExportEffects.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExportEffects 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | typedef NSString *(^JZOutputFilenameBlock)(); 13 | typedef void (^JZFinishVideoBlock)(BOOL success, id result); 14 | typedef void (^JZExportProgressBlock)(NSNumber *percentage); 15 | 16 | @interface ExportEffects : NSObject 17 | 18 | @property (copy, nonatomic) JZFinishVideoBlock finishVideoBlock; 19 | @property (copy, nonatomic) JZExportProgressBlock exportProgressBlock; 20 | @property (copy, nonatomic) JZOutputFilenameBlock filenameBlock; 21 | 22 | + (ExportEffects *)sharedInstance; 23 | 24 | - (void)initVideoArray:(NSMutableArray *)videos; 25 | - (void)writeExportedVideoToAssetsLibrary:(NSString *)outputPath; 26 | 27 | - (void)addEffectToVideo:(NSArray *)videoFilePathArray withAudioFilePath:(NSString *)audioFilePath; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Dependencies/VideoPlay/PBJVideoPlayerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PBJVideoPlayerController.h 3 | // 4 | // Created by Patrick Piemonte on 5/27/13. 5 | // Copyright (c) 2013-present, Patrick Piemonte, http://patrickpiemonte.com 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "PBJVideoView.h" 27 | 28 | typedef NS_ENUM(NSInteger, PBJVideoPlayerPlaybackState) 29 | { 30 | PBJVideoPlayerPlaybackStateStopped = 0, 31 | PBJVideoPlayerPlaybackStatePlaying, 32 | PBJVideoPlayerPlaybackStatePaused, 33 | PBJVideoPlayerPlaybackStateFailed, 34 | }; 35 | 36 | typedef NS_ENUM(NSInteger, PBJVideoPlayerBufferingState) 37 | { 38 | PBJVideoPlayerBufferingStateUnknown = 0, 39 | PBJVideoPlayerBufferingStateReady, 40 | PBJVideoPlayerBufferingStateDelayed, 41 | }; 42 | 43 | // PBJVideoPlayerController.view provides the interface for playing/streaming videos 44 | @protocol PBJVideoPlayerControllerDelegate; 45 | @interface PBJVideoPlayerController : UIViewController 46 | { 47 | 48 | } 49 | 50 | @property (nonatomic, retain) id delegate; 51 | 52 | @property (nonatomic, retain) PBJVideoView *videoView; 53 | 54 | @property (nonatomic, copy) NSString *videoPath; 55 | @property (nonatomic) BOOL playbackLoops; 56 | @property (nonatomic, readonly) NSTimeInterval maxDuration; 57 | 58 | @property (nonatomic, readonly) PBJVideoPlayerPlaybackState playbackState; 59 | @property (nonatomic, readonly) PBJVideoPlayerBufferingState bufferingState; 60 | 61 | - (void)playFromBeginning; 62 | - (void)playFromCurrentTime; 63 | - (void)pause; 64 | - (void)stop; 65 | 66 | - (void)clearView; 67 | 68 | @end 69 | 70 | @protocol PBJVideoPlayerControllerDelegate 71 | @required 72 | - (void)videoPlayerReady:(PBJVideoPlayerController *)videoPlayer; 73 | - (void)videoPlayerPlaybackStateDidChange:(PBJVideoPlayerController *)videoPlayer; 74 | 75 | - (void)videoPlayerPlaybackWillStartFromBeginning:(PBJVideoPlayerController *)videoPlayer; 76 | - (void)videoPlayerPlaybackDidEnd:(PBJVideoPlayerController *)videoPlayer; 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /Dependencies/VideoPlay/PBJVideoView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PBJVideoView.h 3 | // 4 | // Created by Patrick Piemonte on 5/27/13. 5 | // Copyright (c) 2013-present, Patrick Piemonte, http://patrickpiemonte.com 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | // PBJVideoPlayerController provides this class via viewController.view, no need to allocate directly 28 | 29 | @class AVPlayer; 30 | @class AVPlayerLayer; 31 | @interface PBJVideoView : UIView 32 | 33 | @property (nonatomic, assign) AVPlayer *player; 34 | @property (nonatomic, readonly, assign) AVPlayerLayer *playerLayer; 35 | 36 | // defaults to AVLayerVideoGravityResizeAspect 37 | @property (nonatomic, readwrite, copy) NSString *videoFillMode; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Dependencies/VideoPlay/PBJVideoView.m: -------------------------------------------------------------------------------- 1 | // 2 | // PBJVideoView.m 3 | // 4 | // Created by Patrick Piemonte on 5/27/13. 5 | // Copyright (c) 2013-present, Patrick Piemonte, http://patrickpiemonte.com 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "PBJVideoView.h" 26 | 27 | #import 28 | #import 29 | 30 | @interface PBJVideoView () 31 | { 32 | } 33 | 34 | @end 35 | 36 | @implementation PBJVideoView 37 | 38 | + (Class)layerClass 39 | { 40 | return [AVPlayerLayer class]; 41 | } 42 | 43 | #pragma mark - getters/setters 44 | 45 | - (void)setPlayer:(AVPlayer *)player 46 | { 47 | [(AVPlayerLayer *)[self layer] setPlayer:player]; 48 | } 49 | 50 | - (AVPlayer *)player 51 | { 52 | return [(AVPlayerLayer *)[self layer] player]; 53 | } 54 | 55 | - (AVPlayerLayer *)playerLayer 56 | { 57 | return (AVPlayerLayer *)self.layer; 58 | } 59 | 60 | - (void)setVideoFillMode:(NSString *)videoFillMode 61 | { 62 | AVPlayerLayer *playerLayer = (AVPlayerLayer *)[self layer]; 63 | playerLayer.videoGravity = videoFillMode; 64 | } 65 | 66 | - (NSString *)videoFillMode 67 | { 68 | AVPlayerLayer *playerLayer = (AVPlayerLayer *)[self layer]; 69 | return playerLayer.videoGravity; 70 | } 71 | 72 | #pragma mark - init 73 | 74 | - (id)initWithFrame:(CGRect)frame 75 | { 76 | self = [super initWithFrame:frame]; 77 | 78 | if (self) 79 | { 80 | self.playerLayer.backgroundColor = [[UIColor blackColor] CGColor]; 81 | } 82 | return self; 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /Dependencies/VideoPlay/play_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Dependencies/VideoPlay/play_button@2x.png -------------------------------------------------------------------------------- /IMG_0009.MP4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/IMG_0009.MP4 -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/project.xcworkspace/xcshareddata/PictureInPicture.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 21A5D5B0-43DC-4FD2-A140-D9A4368FF759 9 | IDESourceControlProjectName 10 | PictureInPicture 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 42A551E60472DB60CD4AA112E738F745D0C1CBE6 14 | https://github.com/xujingzhou/VideoInVideo.git 15 | 16 | IDESourceControlProjectPath 17 | PictureInPicture.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 42A551E60472DB60CD4AA112E738F745D0C1CBE6 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/xujingzhou/VideoInVideo.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 42A551E60472DB60CD4AA112E738F745D0C1CBE6 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 42A551E60472DB60CD4AA112E738F745D0C1CBE6 36 | IDESourceControlWCCName 37 | PictureInPicture(1.0) 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/project.xcworkspace/xcuserdata/JohnnyXu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture.xcodeproj/project.xcworkspace/xcuserdata/JohnnyXu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/project.xcworkspace/xcuserdata/johnny.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture.xcodeproj/project.xcworkspace/xcuserdata/johnny.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/xcuserdata/JohnnyXu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/xcuserdata/JohnnyXu.xcuserdatad/xcschemes/PictureInPicture.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/xcuserdata/JohnnyXu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | PictureInPicture.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | B2FCECCB1B195F51008FC289 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/xcuserdata/johnny.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /PictureInPicture.xcodeproj/xcuserdata/johnny.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | PictureInPicture.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | B2FCECCB1B195F51008FC289 16 | 17 | primary 18 | 19 | 20 | B2FCECE41B195F51008FC289 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /PictureInPicture/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /PictureInPicture/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 20 | { 21 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 22 | // Override point for customization after application launch. 23 | self.window.backgroundColor = [UIColor whiteColor]; 24 | ViewController *homeVC = [[ViewController alloc] init]; 25 | UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:homeVC]; 26 | self.window.rootViewController = nav; 27 | [self.window makeKeyAndVisible]; 28 | 29 | // Override point for customization after application launch. 30 | return YES; 31 | } 32 | 33 | - (void)applicationWillResignActive:(UIApplication *)application 34 | { 35 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 36 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 37 | } 38 | 39 | - (void)applicationDidEnterBackground:(UIApplication *)application 40 | { 41 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 42 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 43 | } 44 | 45 | - (void)applicationWillEnterForeground:(UIApplication *)application 46 | { 47 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 48 | } 49 | 50 | - (void)applicationDidBecomeActive:(UIApplication *)application 51 | { 52 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 53 | } 54 | 55 | - (void)applicationWillTerminate:(UIApplication *)application 56 | { 57 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "Icon_29@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "40x40", 11 | "idiom" : "iphone", 12 | "filename" : "Icon_40@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "60x60", 17 | "idiom" : "iphone", 18 | "filename" : "Icon_60@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "60x60", 23 | "idiom" : "iphone", 24 | "filename" : "Icon_60@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "ipad", 30 | "filename" : "Icon_29.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "29x29", 35 | "idiom" : "ipad", 36 | "filename" : "Icon_29@2x-1.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "ipad", 42 | "filename" : "Icon_40.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "40x40", 47 | "idiom" : "ipad", 48 | "filename" : "Icon_40@2x-1.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "76x76", 53 | "idiom" : "ipad", 54 | "filename" : "Icon_76.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "76x76", 59 | "idiom" : "ipad", 60 | "filename" : "Icon_76@2x.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29@2x-1.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_29@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40@2x-1.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_40@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_60@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_60@3x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_76.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/AppIcon-2.appiconset/Icon_76@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "filename" : "Default@2x.png", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "extent" : "full-screen", 13 | "idiom" : "iphone", 14 | "subtype" : "retina4", 15 | "filename" : "Default-568@2x.png", 16 | "minimum-system-version" : "7.0", 17 | "orientation" : "portrait", 18 | "scale" : "2x" 19 | }, 20 | { 21 | "orientation" : "portrait", 22 | "idiom" : "ipad", 23 | "extent" : "full-screen", 24 | "minimum-system-version" : "7.0", 25 | "filename" : "Default-Portrait.png", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "orientation" : "landscape", 30 | "idiom" : "ipad", 31 | "extent" : "full-screen", 32 | "minimum-system-version" : "7.0", 33 | "scale" : "1x" 34 | }, 35 | { 36 | "orientation" : "portrait", 37 | "idiom" : "ipad", 38 | "extent" : "full-screen", 39 | "minimum-system-version" : "7.0", 40 | "filename" : "Default-Portrait@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "orientation" : "landscape", 45 | "idiom" : "ipad", 46 | "extent" : "full-screen", 47 | "minimum-system-version" : "7.0", 48 | "scale" : "2x" 49 | } 50 | ], 51 | "info" : { 52 | "version" : 1, 53 | "author" : "xcode" 54 | } 55 | } -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-568@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-568@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/Images.xcassets/LaunchImage-2.launchimage/Default@2x.png -------------------------------------------------------------------------------- /PictureInPicture/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIcons 10 | 11 | CFBundleIcons~ipad 12 | 13 | CFBundleIdentifier 14 | com.johnnyxu.$(PRODUCT_NAME:rfc1034identifier) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | $(PRODUCT_NAME) 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.1 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 2 27 | LSRequiresIPhoneOS 28 | 29 | UIAppFonts 30 | 31 | 迷你简启体.ttf 32 | 33 | UIRequiredDeviceCapabilities 34 | 35 | armv7 36 | 37 | UISupportedInterfaceOrientations 38 | 39 | UIInterfaceOrientationPortrait 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /PictureInPicture/PictureInPicture-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PictureInPicture-Prefix.pch 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/22/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #ifndef __IPHONE_5_0 12 | #warning "This project uses features only available in iOS SDK 5.0 and later." 13 | #endif 14 | 15 | #ifdef __OBJC__ 16 | #import 17 | #import 18 | 19 | // Custom 20 | #import "CommonDefine.h" 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /PictureInPicture/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /PictureInPicture/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | CFBundleDisplayName = "VideoInVideo"; 3 | CFBundleName = "VideoInVideo"; 4 | -------------------------------------------------------------------------------- /PictureInPicture/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/PictureInPicture/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /PictureInPicture/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // PictureInPicture 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) 13 | { 14 | @autoreleasepool 15 | { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /PictureInPicture/zh-Hans.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | CFBundleDisplayName = "VideoInVideo"; 3 | CFBundleName = "VideoInVideo"; 4 | -------------------------------------------------------------------------------- /PictureInPicture/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | 2 | "Theme" = "主题"; 3 | "Album" = "相册"; 4 | "Save" = "保存"; 5 | "UsageHint" = "点击此处开始"; 6 | "Success" = "成功"; 7 | "MsgSuccess" = "成功保存到相册中!"; 8 | "OK" = "确定"; 9 | "Failed" = "失败"; 10 | "MsgFailed" = "保存到相册失败!"; 11 | "Effect" = "特效"; 12 | "MsgConvertFailed" = "文件转换失败!"; 13 | "Processing" = "正在处理..."; 14 | 15 | "Settings" = "设置"; 16 | 17 | "FontName" = "迷你简启体"; 18 | 19 | "Back" = "返回"; 20 | 21 | "Loading" = "正在加载..."; 22 | "Loaded" = "加载完成"; 23 | 24 | "Video" = "视频"; 25 | "Camera" = "相机"; 26 | "PhotoAlbum" = "相册"; 27 | 28 | "MusicList" = "音乐列表"; 29 | "Audio" = "音频"; 30 | "BackgroundMusic" = "背景音乐"; 31 | 32 | "SelectVideo" = "选择背景视频"; 33 | "SelectAudio" = "选择音频"; 34 | "ExportResult" = "导出结果"; 35 | 36 | "SelectGifOrVideo" = "选择嵌入的视频"; 37 | "Gif" = "Gif"; 38 | 39 | "Ready" = "已就绪"; 40 | "NoReady" = "未就绪"; 41 | "VideoContent" = "视频: "; 42 | "AudioContent" = "音频: "; 43 | 44 | "Export" = "导出"; 45 | "StartToCreate" = "开始创建"; 46 | "Start" = "开始"; 47 | 48 | "Step1" = "步骤1: "; 49 | "Step2" = "步骤2: "; 50 | "Step3" = "步骤3: "; 51 | 52 | "Error" = "错误"; 53 | "FileLenHint" = "抱歉, 视频文件长度目前暂定为小于:"; 54 | 55 | "BeautyTime" = "美好时光"; 56 | "PhotoBeautify" = "美图MV"; 57 | 58 | "PicInPic" = "画中画"; 59 | "Demo" = "样例"; 60 | "Convert" = "转换"; 61 | 62 | "Private_Setting_Audio_Tips" = "软件正常工作时,需要使用手机的麦克风权限,请打开权限,通过系统'设置' -> '隐私' -> '麦克风'. "; 63 | "IKnow" = "我知道了"; 64 | 65 | "Seconds" = "秒"; 66 | "SavingVideo" = "正在保存..."; 67 | "VideoExportFailed" = "视频不能被导出."; 68 | "VideoIsEmptyHint" = "背景视频文件为空, 请先选择一个背景视频."; 69 | 70 | "Finish" = "完成"; 71 | "Skip" = "跳过"; 72 | "Cancel" = "取消"; 73 | "Abandon" = "放弃"; 74 | "Reminder" = "提醒"; 75 | "CancelVideoHint" = "真要放弃这个视频么?"; 76 | "ExceedHint" = "超出了最大的选取个数."; 77 | 78 | "Apple" = "Apple"; 79 | "TheMoodOfLove" = "Love Paradise"; 80 | "LeadMeOn" = "Lead Me On"; 81 | "ALittleKiss" = "A Little Kiss"; 82 | "ByeByeSunday" = "Bye Bye Sunday"; 83 | "ComeWithMe" = "Come With Me"; 84 | "DolphinTango" = "Dolphin Tango"; 85 | "IDo" = "I Do"; 86 | "LetMeKnow" = "Let Me Know"; 87 | "SwingDance" = "Swing Dance"; 88 | -------------------------------------------------------------------------------- /PictureInPictureTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.johnnyxu.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /PictureInPictureTests/PictureInPictureTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // PictureInPictureTests.m 3 | // PictureInPictureTests 4 | // 5 | // Created by Johnny Xu(徐景周) on 5/30/15. 6 | // Copyright (c) 2015 Future Studio. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface PictureInPictureTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation PictureInPictureTests 17 | 18 | - (void)setUp 19 | { 20 | [super setUp]; 21 | // Put setup code here. This method is called before the invocation of each test method in the class. 22 | } 23 | 24 | - (void)tearDown 25 | { 26 | // Put teardown code here. This method is called after the invocation of each test method in the class. 27 | [super tearDown]; 28 | } 29 | 30 | - (void)testExample 31 | { 32 | // This is an example of a functional test case. 33 | XCTAssert(YES, @"Pass"); 34 | } 35 | 36 | - (void)testPerformanceExample 37 | { 38 | // This is an example of a performance test case. 39 | [self measureBlock:^{ 40 | // Put the code you want to measure the time of here. 41 | }]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VideoInVideo 2 | Embeddable some child videos into a parent video. Tested on iPhone 4 and iPhone 5S. 3 | 4 | 指定多个视频和Gif文件,内嵌到一个父视频中生成输出。 5 | 6 | Copyright and all rights therein are retained by authors or by other copyright holders. 7 | Johnny Xu(徐景周) 8 | Future Studio 9 | 10 | Demo 11 | -------------------------------------------------------------------------------- /Resource/Demo/Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Demo/Demo.gif -------------------------------------------------------------------------------- /Resource/Font/迷你简启体.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Font/迷你简启体.ttf -------------------------------------------------------------------------------- /Resource/Icon/Icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_1024.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_128.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_16.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_256.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_29.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_29@2x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_29@3x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_32.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_40.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_40@2x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_40@3x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_512.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_60@2x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_60@3x.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_64.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_76.png -------------------------------------------------------------------------------- /Resource/Icon/Icon_76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Icon/Icon_76@2x.png -------------------------------------------------------------------------------- /Resource/Images/GoalLetter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/GoalLetter.png -------------------------------------------------------------------------------- /Resource/Images/NewStart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/NewStart.png -------------------------------------------------------------------------------- /Resource/Images/StartLetter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/StartLetter.png -------------------------------------------------------------------------------- /Resource/Images/Video_Add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/Video_Add.png -------------------------------------------------------------------------------- /Resource/Images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/close.png -------------------------------------------------------------------------------- /Resource/Images/close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/close@2x.png -------------------------------------------------------------------------------- /Resource/Images/navbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/navbar.png -------------------------------------------------------------------------------- /Resource/Images/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/pause.png -------------------------------------------------------------------------------- /Resource/Images/sharebg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/sharebg.png -------------------------------------------------------------------------------- /Resource/Images/sharebg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/sharebg2.png -------------------------------------------------------------------------------- /Resource/Images/sharebg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/sharebg3.png -------------------------------------------------------------------------------- /Resource/Images/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Images/start.png -------------------------------------------------------------------------------- /Resource/Musics/A Little Kiss.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/A Little Kiss.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Apple.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Apple.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Bye Bye Sunday.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Bye Bye Sunday.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Come With Me.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Come With Me.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Dolphin Tango.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Dolphin Tango.mp3 -------------------------------------------------------------------------------- /Resource/Musics/I Do.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/I Do.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Lead Me On.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Lead Me On.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Let Me Know.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Let Me Know.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Love Paradise.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Love Paradise.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Rabbit.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Rabbit.mp3 -------------------------------------------------------------------------------- /Resource/Musics/Swing Dance.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Musics/Swing Dance.mp3 -------------------------------------------------------------------------------- /Resource/Splash/Default-568@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Splash/Default-568@2x.png -------------------------------------------------------------------------------- /Resource/Splash/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Splash/Default-Portrait.png -------------------------------------------------------------------------------- /Resource/Splash/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Splash/Default-Portrait@2x.png -------------------------------------------------------------------------------- /Resource/Splash/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Splash/Default.png -------------------------------------------------------------------------------- /Resource/Splash/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Splash/Default@2x.png -------------------------------------------------------------------------------- /Resource/Videos/IMG_Dst.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujingzhou/VideoInVideo/1ff98bf4f43d6e8287475fc321ed7ad9a107bb61/Resource/Videos/IMG_Dst.mp4 --------------------------------------------------------------------------------