├── .DS_Store ├── LICENSE ├── README.md ├── pop ├── .DS_Store ├── pop.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── neil.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── neil.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ ├── pop.xcscheme │ │ └── xcschememanagement.plist └── pop │ ├── .DS_Store │ ├── AppDefinition.h │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── .DS_Store │ ├── AppIcon.appiconset │ │ ├── .DS_Store │ │ ├── Contents.json │ │ ├── appIcon.png │ │ ├── appicon-1.png │ │ ├── appicon-2.png │ │ ├── appicon-3.png │ │ ├── appicon-4.png │ │ └── appicon-5.png │ ├── Contents.json │ ├── edit_ horizontal_icon.imageset │ │ ├── Contents.json │ │ └── edit_ horizontal_icon.png │ ├── edit_clip_icon.imageset │ │ ├── Contents.json │ │ └── edit_clip_icon.png │ ├── edit_close_icon.imageset │ │ ├── Contents.json │ │ └── edit_close_icon.png │ ├── edit_delete_btn.imageset │ │ ├── Contents.json │ │ └── edit_delete_btn.png │ ├── edit_emoji_icon.imageset │ │ ├── Contents.json │ │ └── edit_emoji_icon.png │ ├── edit_pen_icon.imageset │ │ ├── Contents.json │ │ └── edit_pen_icon.png │ ├── edit_save_icon.imageset │ │ ├── Contents.json │ │ └── edit_save_icon.png │ ├── edit_text_icon.imageset │ │ ├── Contents.json │ │ └── edit_text_icon.png │ ├── icon_common_picker_selected.imageset │ │ ├── Contents.json │ │ └── icon_common_picker_selected@(null).pdf │ ├── icon_common_picker_unselected.imageset │ │ ├── Contents.json │ │ └── icon_common_picker_unselected@(null).pdf │ ├── main_cover_icon.imageset │ │ ├── Contents.json │ │ └── main_cover_icon.png │ ├── main_import_btn.imageset │ │ ├── Contents.json │ │ └── main_import_btn.png │ ├── main_logo_icon.imageset │ │ ├── Contents.json │ │ └── main_logo_img.png │ └── main_set_icon.imageset │ │ ├── Contents.json │ │ └── main_set_img.png │ ├── Base.lproj │ └── .DS_Store │ ├── Base │ ├── .DS_Store │ ├── PPBasicController.h │ ├── PPBasicController.m │ ├── PPBasicNavigationController.h │ └── PPBasicNavigationController.m │ ├── Emoji.xcassets │ ├── .DS_Store │ ├── 01.imageset │ │ ├── 01.png │ │ └── Contents.json │ ├── 02.imageset │ │ ├── 02.png │ │ └── Contents.json │ ├── 03.imageset │ │ ├── 03.png │ │ └── Contents.json │ ├── 04.imageset │ │ ├── 04.png │ │ └── Contents.json │ ├── 05.imageset │ │ ├── 05.png │ │ └── Contents.json │ ├── 06.imageset │ │ ├── 06.png │ │ └── Contents.json │ ├── 07.imageset │ │ ├── 07.png │ │ └── Contents.json │ ├── 08.imageset │ │ ├── 08.png │ │ └── Contents.json │ ├── 09.imageset │ │ ├── 09.png │ │ └── Contents.json │ ├── 10.imageset │ │ ├── 10.png │ │ └── Contents.json │ ├── 11.imageset │ │ ├── 11.png │ │ └── Contents.json │ ├── 12.imageset │ │ ├── 12.png │ │ └── Contents.json │ ├── 13.imageset │ │ ├── 13.png │ │ └── Contents.json │ ├── 14.imageset │ │ ├── 14.png │ │ └── Contents.json │ ├── 15.imageset │ │ ├── 15.png │ │ └── Contents.json │ ├── 16.imageset │ │ ├── 16.png │ │ └── Contents.json │ ├── 17.imageset │ │ ├── 17.png │ │ └── Contents.json │ ├── 18.imageset │ │ ├── 18.png │ │ └── Contents.json │ ├── 19.imageset │ │ ├── 19.png │ │ └── Contents.json │ ├── 20.imageset │ │ ├── 20.png │ │ └── Contents.json │ ├── 21.imageset │ │ ├── 21.png │ │ └── Contents.json │ ├── 22.imageset │ │ ├── 22.png │ │ └── Contents.json │ ├── 23.imageset │ │ ├── 23.png │ │ └── Contents.json │ ├── 24.imageset │ │ ├── 24.png │ │ └── Contents.json │ ├── 25.imageset │ │ ├── 25.png │ │ └── Contents.json │ ├── 26.imageset │ │ ├── 26.png │ │ └── Contents.json │ ├── 27.imageset │ │ ├── 27.png │ │ └── Contents.json │ ├── 28.imageset │ │ ├── 28.png │ │ └── Contents.json │ ├── 29.imageset │ │ ├── 29.png │ │ └── Contents.json │ ├── 30.imageset │ │ ├── 30.png │ │ └── Contents.json │ ├── 31.imageset │ │ ├── 31.png │ │ └── Contents.json │ ├── 32.imageset │ │ ├── 32.png │ │ └── Contents.json │ ├── 33.imageset │ │ ├── 33.png │ │ └── Contents.json │ ├── 34.imageset │ │ ├── 34.png │ │ └── Contents.json │ ├── 35.imageset │ │ ├── 35.png │ │ └── Contents.json │ ├── 36.imageset │ │ ├── 36.png │ │ └── Contents.json │ ├── 37.imageset │ │ ├── 37.png │ │ └── Contents.json │ ├── 38.imageset │ │ ├── 38.png │ │ └── Contents.json │ ├── 39.imageset │ │ ├── 39.png │ │ └── Contents.json │ ├── 40.imageset │ │ ├── 40.png │ │ └── Contents.json │ ├── 41.imageset │ │ ├── 41.png │ │ └── Contents.json │ ├── 42.imageset │ │ ├── 42.png │ │ └── Contents.json │ ├── 43.imageset │ │ ├── 43.png │ │ └── Contents.json │ ├── 44.imageset │ │ ├── 44.png │ │ └── Contents.json │ ├── 45.imageset │ │ ├── 45.png │ │ └── Contents.json │ ├── 46.imageset │ │ ├── 46.png │ │ └── Contents.json │ ├── 47.imageset │ │ ├── 47.png │ │ └── Contents.json │ ├── 48.imageset │ │ ├── 48.png │ │ └── Contents.json │ ├── 49.imageset │ │ ├── 49.png │ │ └── Contents.json │ ├── 50.imageset │ │ ├── 50.png │ │ └── Contents.json │ ├── 51.imageset │ │ ├── 51.png │ │ └── Contents.json │ ├── 52.imageset │ │ ├── 52.png │ │ └── Contents.json │ ├── 53.imageset │ │ ├── 53.png │ │ └── Contents.json │ ├── 54.imageset │ │ ├── 54.png │ │ └── Contents.json │ ├── 55.imageset │ │ ├── 55.png │ │ └── Contents.json │ ├── 56.imageset │ │ ├── 56.png │ │ └── Contents.json │ ├── 57.imageset │ │ ├── 57.png │ │ └── Contents.json │ ├── 58.imageset │ │ ├── 58.png │ │ └── Contents.json │ ├── 59.imageset │ │ ├── 59.png │ │ └── Contents.json │ ├── 60.imageset │ │ ├── 60.png │ │ └── Contents.json │ ├── 61.imageset │ │ ├── 61.png │ │ └── Contents.json │ ├── 62.imageset │ │ ├── 62.png │ │ └── Contents.json │ ├── 63.imageset │ │ ├── 63.png │ │ └── Contents.json │ ├── 64.imageset │ │ ├── 64.png │ │ └── Contents.json │ ├── 65.imageset │ │ ├── 65.png │ │ └── Contents.json │ ├── 66.imageset │ │ ├── 66.png │ │ └── Contents.json │ ├── 67.imageset │ │ ├── 67.png │ │ └── Contents.json │ ├── 68.imageset │ │ ├── 68.png │ │ └── Contents.json │ ├── 69.imageset │ │ ├── 69.png │ │ └── Contents.json │ ├── 70.imageset │ │ ├── 70.png │ │ └── Contents.json │ ├── 71.imageset │ │ ├── 71.png │ │ └── Contents.json │ ├── 72.imageset │ │ ├── 72.png │ │ └── Contents.json │ ├── 73.imageset │ │ ├── 73.png │ │ └── Contents.json │ ├── 74.imageset │ │ ├── 74.png │ │ └── Contents.json │ ├── 75.imageset │ │ ├── 75.png │ │ └── Contents.json │ ├── 76.imageset │ │ ├── 76.png │ │ └── Contents.json │ ├── 77.imageset │ │ ├── 77.png │ │ └── Contents.json │ ├── 78.imageset │ │ ├── 78.png │ │ └── Contents.json │ ├── 79.imageset │ │ ├── 79.png │ │ └── Contents.json │ ├── 80.imageset │ │ ├── 80.png │ │ └── Contents.json │ ├── 81.imageset │ │ ├── 81.png │ │ └── Contents.json │ ├── 82.imageset │ │ ├── 82.png │ │ └── Contents.json │ ├── 83.imageset │ │ ├── 83.png │ │ └── Contents.json │ ├── 84.imageset │ │ ├── 84.png │ │ └── Contents.json │ ├── 85.imageset │ │ ├── 85.png │ │ └── Contents.json │ ├── 86.imageset │ │ ├── 86.png │ │ └── Contents.json │ ├── 87.imageset │ │ ├── 87.png │ │ └── Contents.json │ ├── 88.imageset │ │ ├── 88.png │ │ └── Contents.json │ ├── 89.imageset │ │ ├── 89.png │ │ └── Contents.json │ ├── 90.imageset │ │ ├── 90.png │ │ └── Contents.json │ ├── 91.imageset │ │ ├── 91.png │ │ └── Contents.json │ ├── 92.imageset │ │ ├── 92.png │ │ └── Contents.json │ ├── 93.imageset │ │ ├── 93.png │ │ └── Contents.json │ ├── 94.imageset │ │ ├── 94.png │ │ └── Contents.json │ ├── 95.imageset │ │ ├── 95.png │ │ └── Contents.json │ ├── 96.imageset │ │ ├── 96.png │ │ └── Contents.json │ ├── 97.imageset │ │ ├── 97.png │ │ └── Contents.json │ ├── 98.imageset │ │ ├── 98.png │ │ └── Contents.json │ └── Contents.json │ ├── Info.plist │ ├── PPManagers │ ├── PPMediaManager.h │ ├── PPMediaManager.m │ ├── PPPermissionManager.h │ └── PPPermissionManager.m │ ├── PPMediaProcesser │ ├── .DS_Store │ └── VideoCompositioner │ │ ├── PPAVAssetExportSession.h │ │ ├── PPAVAssetExportSession.m │ │ ├── PPTimeStamp.h │ │ ├── PPTimeStamp.m │ │ ├── PPVideoBaseProcess.h │ │ ├── PPVideoBaseProcess.m │ │ ├── PPVideoWatermarkProcess.h │ │ └── PPVideoWatermarkProcess.m │ ├── PPStoryBoards │ ├── LaunchScreen.storyboard │ ├── Main.storyboard │ └── PPVideoEdit.storyboard │ ├── PPTest │ ├── PPTestCase.h │ └── PPTestCase.m │ ├── PPUtils │ ├── PPDirectoryManager.h │ ├── PPDirectoryManager.m │ ├── PPHelper+Draw.h │ ├── PPHelper+Draw.m │ ├── PPHelper+System.h │ ├── PPHelper+System.m │ ├── PPHelper+Time.h │ ├── PPHelper+Time.m │ ├── PPHelper.h │ ├── PPHelper.m │ ├── PPToast.h │ ├── PPToast.m │ ├── PPUserDefaults.h │ ├── PPUserDefaults.m │ ├── UIStoryboard+LoadController.h │ ├── UIStoryboard+LoadController.m │ ├── UIView+FrameMethods.h │ └── UIView+FrameMethods.m │ ├── PPVideoEdit │ ├── .DS_Store │ ├── ClipView │ │ ├── .DS_Store │ │ ├── ICGVideoTrimmer │ │ │ ├── ICGRulerView.h │ │ │ ├── ICGRulerView.m │ │ │ ├── ICGThumbView.h │ │ │ ├── ICGThumbView.m │ │ │ ├── ICGVideoTrimmer.h │ │ │ ├── ICGVideoTrimmerView.h │ │ │ └── ICGVideoTrimmerView.m │ │ ├── PPVideoClipView.h │ │ └── PPVideoClipView.m │ ├── DrawingBoard │ │ ├── .DS_Store │ │ ├── PPDrawLayer.h │ │ └── PPDrawLayer.m │ ├── Emoji │ │ ├── PPEmojiCell.h │ │ ├── PPEmojiCell.m │ │ └── PPEmojiCell.xib │ ├── ImageEditView │ │ ├── PPImageEditView.h │ │ ├── PPImageEditView.m │ │ └── PPImageEditView.xib │ ├── PPVideoEditBaseView.h │ ├── PPVideoEditBaseView.m │ ├── PPVideoEditController.h │ ├── PPVideoEditController.m │ ├── PPVideoEditDefines.h │ ├── PPVideoEditDefines.m │ ├── PPVideoPlayView.h │ ├── PPVideoPlayView.m │ ├── RenderResult │ │ ├── PPCanvasView.h │ │ ├── PPCanvasView.m │ │ ├── PPRenderEmojiResult.h │ │ ├── PPRenderEmojiResult.m │ │ ├── PPRenderLayerResult.h │ │ ├── PPRenderLayerResult.m │ │ ├── PPRenderResult.h │ │ ├── PPRenderResult.m │ │ ├── PPRenderResultDefines.h │ │ ├── PPRenderTextResult.h │ │ └── PPRenderTextResult.m │ └── RenderSource │ │ ├── .DS_Store │ │ ├── PPDrawSourceView.h │ │ ├── PPDrawSourceView.m │ │ ├── PPEmojiSourceView.h │ │ ├── PPEmojiSourceView.m │ │ ├── PPEmojiSourceView.xib │ │ ├── PPRenderSourceView.h │ │ ├── PPRenderSourceView.m │ │ ├── PPTextSourceView.h │ │ ├── PPTextSourceView.m │ │ └── PPTextSourceView.xib │ ├── Thirdpart │ ├── .DS_Store │ ├── ImagePicker │ │ └── TZImagePickerController │ │ │ ├── NSBundle+TZImagePicker.h │ │ │ ├── NSBundle+TZImagePicker.m │ │ │ ├── TZAssetCell.h │ │ │ ├── TZAssetCell.m │ │ │ ├── TZAssetModel.h │ │ │ ├── TZAssetModel.m │ │ │ ├── TZGifPhotoPreviewController.h │ │ │ ├── TZGifPhotoPreviewController.m │ │ │ ├── TZImageCropManager.h │ │ │ ├── TZImageCropManager.m │ │ │ ├── TZImageManager.h │ │ │ ├── TZImageManager.m │ │ │ ├── TZImagePickerController.bundle │ │ │ ├── MMVideoPreviewPlay@2x.png │ │ │ ├── MMVideoPreviewPlayHL@2x.png │ │ │ ├── Root.plist │ │ │ ├── VideoSendIcon@2x.png │ │ │ ├── en.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── navi_back@2x.png │ │ │ ├── photo_def_photoPickerVc@2x.png │ │ │ ├── photo_def_previewVc@2x.png │ │ │ ├── photo_number_icon@2x.png │ │ │ ├── photo_original_def@2x.png │ │ │ ├── photo_original_sel@2x.png │ │ │ ├── photo_sel_photoPickerVc@2x.png │ │ │ ├── photo_sel_previewVc@2x.png │ │ │ ├── preview_number_icon@2x.png │ │ │ ├── preview_original_def@2x.png │ │ │ ├── takePicture@2x.png │ │ │ └── zh-Hans.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── TZImagePickerController.h │ │ │ ├── TZImagePickerController.m │ │ │ ├── TZLocationManager.h │ │ │ ├── TZLocationManager.m │ │ │ ├── TZPhotoPickerController.h │ │ │ ├── TZPhotoPickerController.m │ │ │ ├── TZPhotoPreviewCell.h │ │ │ ├── TZPhotoPreviewCell.m │ │ │ ├── TZPhotoPreviewController.h │ │ │ ├── TZPhotoPreviewController.m │ │ │ ├── TZProgressView.h │ │ │ ├── TZProgressView.m │ │ │ ├── TZVideoPlayerController.h │ │ │ ├── TZVideoPlayerController.m │ │ │ ├── UIView+Layout.h │ │ │ └── UIView+Layout.m │ ├── MBProgressView │ │ ├── MBProgressHUD.h │ │ └── MBProgressHUD.m │ └── Masonry │ │ └── Masonry │ │ ├── MASCompositeConstraint.h │ │ ├── MASCompositeConstraint.m │ │ ├── MASConstraint+Private.h │ │ ├── MASConstraint.h │ │ ├── MASConstraint.m │ │ ├── MASConstraintMaker.h │ │ ├── MASConstraintMaker.m │ │ ├── MASLayoutConstraint.h │ │ ├── MASLayoutConstraint.m │ │ ├── MASUtilities.h │ │ ├── MASViewAttribute.h │ │ ├── MASViewAttribute.m │ │ ├── MASViewConstraint.h │ │ ├── MASViewConstraint.m │ │ ├── Masonry.h │ │ ├── NSArray+MASAdditions.h │ │ ├── NSArray+MASAdditions.m │ │ ├── NSArray+MASShorthandAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.m │ │ ├── View+MASAdditions.h │ │ ├── View+MASAdditions.m │ │ ├── View+MASShorthandAdditions.h │ │ ├── ViewController+MASAdditions.h │ │ └── ViewController+MASAdditions.m │ ├── ViewController.h │ ├── ViewController.m │ ├── main.m │ └── pop_prefix.pch └── screenshots ├── 1.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg └── 6.jpg /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/.DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 何国文 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PPVideoEdit 2 | PPVideoEdit是一个视频编辑,添加表情,添加文字的App 3 | 功能方面仿照Instagram 4 | 5 | 完整的app,下载之后就可以运行。 6 | 7 | 如果使用中有什么问题,可以联系我,QQ:936750655 8 | 9 | 下面是主要界面截图
10 | 11 |
12 | 图片名称 13 |
14 | 15 |
16 | 图片名称 图片名称 图片名称 17 |
18 | -------------------------------------------------------------------------------- /pop/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/.DS_Store -------------------------------------------------------------------------------- /pop/pop.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pop/pop.xcodeproj/project.xcworkspace/xcuserdata/neil.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop.xcodeproj/project.xcworkspace/xcuserdata/neil.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /pop/pop.xcodeproj/xcuserdata/neil.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | pop.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 280B04E71F6633F200C32ED4 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /pop/pop/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/.DS_Store -------------------------------------------------------------------------------- /pop/pop/AppDefinition.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDefinition.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/27. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #ifndef AppDefinition_h 10 | #define AppDefinition_h 11 | #define WS(weakSelf) __weak __typeof(&*self)weakSelf = self; 12 | 13 | #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 14 | #define LineViewColor UIColor(226, 226, 226, 1) 15 | //屏幕尺寸 16 | #define SCREENWIDTH [[UIScreen mainScreen] bounds].size.width 17 | #define SCREENHEIGHT [[UIScreen mainScreen] bounds].size.height 18 | #define SCALE [[UIScreen mainScreen] bounds].size.width / 320 19 | #define UIScale(x) x * SCALE 20 | 21 | //字符串转换 22 | #define ToString(x) [NSString stringWithFormat:@"%@",x] 23 | #define UIColor(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] 24 | #define UIFont(x) [UIFont systemFontOfSize:x] 25 | 26 | #define USE_SYSTEM_IMAGE_PICKER 0 27 | 28 | #endif /* AppDefinition_h */ 29 | -------------------------------------------------------------------------------- /pop/pop/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. 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 | -------------------------------------------------------------------------------- /pop/pop/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | @interface AppDelegate () 11 | 12 | @end 13 | 14 | @implementation AppDelegate 15 | 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 18 | 19 | return YES; 20 | } 21 | 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // 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. 25 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 26 | } 27 | 28 | 29 | - (void)applicationDidEnterBackground:(UIApplication *)application { 30 | // 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. 31 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 32 | } 33 | 34 | 35 | - (void)applicationWillEnterForeground:(UIApplication *)application { 36 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 37 | } 38 | 39 | 40 | - (void)applicationDidBecomeActive:(UIApplication *)application { 41 | // 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. 42 | } 43 | 44 | 45 | - (void)applicationWillTerminate:(UIApplication *)application { 46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 47 | } 48 | 49 | 50 | 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "appicon-1.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "idiom" : "iphone", 11 | "size" : "20x20", 12 | "scale" : "3x" 13 | }, 14 | { 15 | "idiom" : "iphone", 16 | "size" : "29x29", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "idiom" : "iphone", 21 | "size" : "29x29", 22 | "scale" : "3x" 23 | }, 24 | { 25 | "size" : "40x40", 26 | "idiom" : "iphone", 27 | "filename" : "appicon-2.png", 28 | "scale" : "2x" 29 | }, 30 | { 31 | "size" : "40x40", 32 | "idiom" : "iphone", 33 | "filename" : "appicon-4.png", 34 | "scale" : "3x" 35 | }, 36 | { 37 | "size" : "60x60", 38 | "idiom" : "iphone", 39 | "filename" : "appicon-3.png", 40 | "scale" : "2x" 41 | }, 42 | { 43 | "size" : "60x60", 44 | "idiom" : "iphone", 45 | "filename" : "appicon-5.png", 46 | "scale" : "3x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "1x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "20x20", 56 | "scale" : "2x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "29x29", 66 | "scale" : "2x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "1x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "40x40", 76 | "scale" : "2x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "76x76", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ipad", 90 | "size" : "83.5x83.5", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "idiom" : "ios-marketing", 95 | "size" : "1024x1024", 96 | "scale" : "1x" 97 | } 98 | ], 99 | "info" : { 100 | "version" : 1, 101 | "author" : "xcode" 102 | } 103 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appIcon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-1.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-2.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-3.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-4.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/AppIcon.appiconset/appicon-5.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_ horizontal_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_ horizontal_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_ horizontal_icon.imageset/edit_ horizontal_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_ horizontal_icon.imageset/edit_ horizontal_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_clip_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_clip_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_clip_icon.imageset/edit_clip_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_clip_icon.imageset/edit_clip_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_close_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_close_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_close_icon.imageset/edit_close_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_close_icon.imageset/edit_close_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_delete_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_delete_btn.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_delete_btn.imageset/edit_delete_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_delete_btn.imageset/edit_delete_btn.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_emoji_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_emoji_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_emoji_icon.imageset/edit_emoji_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_emoji_icon.imageset/edit_emoji_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_pen_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_pen_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_pen_icon.imageset/edit_pen_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_pen_icon.imageset/edit_pen_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_save_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_save_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_save_icon.imageset/edit_save_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_save_icon.imageset/edit_save_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_text_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit_text_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/edit_text_icon.imageset/edit_text_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/edit_text_icon.imageset/edit_text_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/icon_common_picker_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_common_picker_selected@(null).pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/icon_common_picker_selected.imageset/icon_common_picker_selected@(null).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/icon_common_picker_selected.imageset/icon_common_picker_selected@(null).pdf -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/icon_common_picker_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_common_picker_unselected@(null).pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/icon_common_picker_unselected.imageset/icon_common_picker_unselected@(null).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/icon_common_picker_unselected.imageset/icon_common_picker_unselected@(null).pdf -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_cover_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "main_cover_icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_cover_icon.imageset/main_cover_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/main_cover_icon.imageset/main_cover_icon.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_import_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "main_import_btn.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_import_btn.imageset/main_import_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/main_import_btn.imageset/main_import_btn.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_logo_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "main_logo_img.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_logo_icon.imageset/main_logo_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/main_logo_icon.imageset/main_logo_img.png -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_set_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "main_set_img.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Assets.xcassets/main_set_icon.imageset/main_set_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Assets.xcassets/main_set_icon.imageset/main_set_img.png -------------------------------------------------------------------------------- /pop/pop/Base.lproj/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Base.lproj/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Base/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Base/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Base/PPBasicController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPBasicController.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPBasicController : UIViewController 12 | 13 | 14 | //- (void)showLoading; 15 | // 16 | //- (void)hiddenLoading; 17 | @end 18 | -------------------------------------------------------------------------------- /pop/pop/Base/PPBasicController.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPBasicController.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPBasicController.h" 10 | 11 | @interface PPBasicController () 12 | 13 | @end 14 | 15 | @implementation PPBasicController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (BOOL)prefersStatusBarHidden { 23 | return YES; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /pop/pop/Base/PPBasicNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPBaseNavigationController.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/27. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPBasicNavigationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /pop/pop/Base/PPBasicNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPBaseNavigationController.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/27. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPBasicNavigationController.h" 10 | 11 | @interface PPBasicNavigationController () 12 | 13 | @end 14 | 15 | @implementation PPBasicNavigationController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (BOOL)prefersStatusBarHidden { 23 | return YES; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/01.imageset/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/01.imageset/01.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/01.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "01.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/02.imageset/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/02.imageset/02.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/02.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "02.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/03.imageset/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/03.imageset/03.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/03.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "03.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/04.imageset/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/04.imageset/04.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/04.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "04.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/05.imageset/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/05.imageset/05.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/05.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "05.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/06.imageset/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/06.imageset/06.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/06.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "06.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/07.imageset/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/07.imageset/07.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/07.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "07.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/08.imageset/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/08.imageset/08.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/08.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "08.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/09.imageset/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/09.imageset/09.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/09.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "09.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/10.imageset/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/10.imageset/10.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "10.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/11.imageset/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/11.imageset/11.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "11.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/12.imageset/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/12.imageset/12.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/12.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "12.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/13.imageset/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/13.imageset/13.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/13.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "13.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/14.imageset/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/14.imageset/14.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/14.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "14.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/15.imageset/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/15.imageset/15.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/15.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "15.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/16.imageset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/16.imageset/16.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "16.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/17.imageset/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/17.imageset/17.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/17.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "17.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/18.imageset/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/18.imageset/18.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "18.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/19.imageset/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/19.imageset/19.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/19.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "19.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/20.imageset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/20.imageset/20.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/20.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "20.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/21.imageset/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/21.imageset/21.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/21.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "21.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/22.imageset/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/22.imageset/22.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/22.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "22.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/23.imageset/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/23.imageset/23.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/23.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "23.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/24.imageset/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/24.imageset/24.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "24.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/25.imageset/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/25.imageset/25.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/25.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "25.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/26.imageset/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/26.imageset/26.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/26.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "26.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/27.imageset/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/27.imageset/27.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/27.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "27.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/28.imageset/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/28.imageset/28.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/28.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "28.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/29.imageset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/29.imageset/29.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/29.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "29.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/30.imageset/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/30.imageset/30.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/30.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "30.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/31.imageset/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/31.imageset/31.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/31.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "31.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/32.imageset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/32.imageset/32.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/32.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "32.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/33.imageset/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/33.imageset/33.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/33.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "33.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/34.imageset/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/34.imageset/34.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/34.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "34.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/35.imageset/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/35.imageset/35.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/35.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "35.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/36.imageset/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/36.imageset/36.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/36.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "36.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/37.imageset/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/37.imageset/37.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/37.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "37.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/38.imageset/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/38.imageset/38.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/38.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "38.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/39.imageset/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/39.imageset/39.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/39.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "39.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/40.imageset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/40.imageset/40.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/40.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "40.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/41.imageset/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/41.imageset/41.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/41.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "41.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/42.imageset/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/42.imageset/42.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/42.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "42.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/43.imageset/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/43.imageset/43.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/43.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "43.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/44.imageset/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/44.imageset/44.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/44.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "44.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/45.imageset/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/45.imageset/45.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/45.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "45.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/46.imageset/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/46.imageset/46.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/46.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "46.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/47.imageset/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/47.imageset/47.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/47.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "47.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/48.imageset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/48.imageset/48.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/48.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "48.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/49.imageset/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/49.imageset/49.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/49.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "49.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/50.imageset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/50.imageset/50.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/50.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "50.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/51.imageset/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/51.imageset/51.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/51.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "51.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/52.imageset/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/52.imageset/52.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/52.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "52.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/53.imageset/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/53.imageset/53.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/53.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "53.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/54.imageset/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/54.imageset/54.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/54.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "54.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/55.imageset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/55.imageset/55.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/55.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "55.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/56.imageset/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/56.imageset/56.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/56.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "56.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/57.imageset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/57.imageset/57.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/57.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "57.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/58.imageset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/58.imageset/58.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/58.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "58.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/59.imageset/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/59.imageset/59.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/59.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "59.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/60.imageset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/60.imageset/60.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/60.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/61.imageset/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/61.imageset/61.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/61.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "61.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/62.imageset/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/62.imageset/62.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/62.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "62.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/63.imageset/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/63.imageset/63.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/63.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "63.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/64.imageset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/64.imageset/64.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/64.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "64.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/65.imageset/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/65.imageset/65.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/65.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "65.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/66.imageset/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/66.imageset/66.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/66.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "66.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/67.imageset/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/67.imageset/67.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/67.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "67.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/68.imageset/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/68.imageset/68.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/68.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "68.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/69.imageset/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/69.imageset/69.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/69.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "69.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/70.imageset/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/70.imageset/70.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/70.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "70.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/71.imageset/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/71.imageset/71.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/71.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "71.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/72.imageset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/72.imageset/72.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/72.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "72.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/73.imageset/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/73.imageset/73.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/73.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "73.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/74.imageset/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/74.imageset/74.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/74.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "74.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/75.imageset/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/75.imageset/75.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/75.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "75.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/76.imageset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/76.imageset/76.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/76.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "76.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/77.imageset/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/77.imageset/77.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/77.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "77.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/78.imageset/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/78.imageset/78.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/78.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "78.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/79.imageset/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/79.imageset/79.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/79.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "79.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/80.imageset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/80.imageset/80.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/80.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "80.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/81.imageset/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/81.imageset/81.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/81.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "81.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/82.imageset/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/82.imageset/82.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/82.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "82.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/83.imageset/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/83.imageset/83.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/83.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "83.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/84.imageset/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/84.imageset/84.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/84.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "84.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/85.imageset/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/85.imageset/85.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/85.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "85.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/86.imageset/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/86.imageset/86.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/86.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "86.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/87.imageset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/87.imageset/87.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/87.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "87.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/88.imageset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/88.imageset/88.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/88.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "88.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/89.imageset/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/89.imageset/89.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/89.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "89.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/90.imageset/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/90.imageset/90.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/90.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "90.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/91.imageset/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/91.imageset/91.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/91.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "91.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/92.imageset/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/92.imageset/92.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/92.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "92.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/93.imageset/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/93.imageset/93.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/93.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "93.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/94.imageset/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/94.imageset/94.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/94.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "94.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/95.imageset/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/95.imageset/95.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/95.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "95.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/96.imageset/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/96.imageset/96.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/96.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/97.imageset/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/97.imageset/97.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/97.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "97.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/98.imageset/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Emoji.xcassets/98.imageset/98.png -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/98.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "98.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /pop/pop/Emoji.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /pop/pop/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIStatusBarHidden 6 | 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSPhotoLibraryUsageDescription 26 | App需要您的同意,才能访问相册 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /pop/pop/PPManagers/PPMediaManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // SAMediaManager.h 3 | // SybAssistant 4 | // 5 | // Created by chance on 14-10-21. 6 | // Copyright (c) 2014年 Tencent. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^MediaSaveComplition)(NSURL *assetUrl, NSError *error); 12 | typedef void(^MediaFetchComplition)(NSArray *result, NSError *error); 13 | typedef void(^MediaDeleteComplition)(BOOL success,NSError *error); 14 | 15 | /** will send in mainThread */ 16 | extern NSString * const kSAVideoSaveToAlbumSuccessNotification; 17 | 18 | // 图片,视频等多媒体的管理 19 | @interface PPMediaManager : NSObject 20 | 21 | + (PPMediaManager *)sharedManager; 22 | 23 | /** 24 | 获取相册视频 25 | 26 | @param albumName 相册名称 27 | @param completion 结果回调, 返回SALocalVideoInfo数组 28 | */ 29 | //- (void)fetchVideosInAblum:(NSString *)albumName completion:(MediaFetchComplition)complition; 30 | 31 | 32 | /** 33 | 保存视频到系统媒体库,可自定义文件夹 34 | 35 | @param videoUrlString 要保存的视频文件地址(本地) 36 | @param albumName 相册名称 37 | @param completion 结果回调*/ 38 | - (void)saveVideo:(NSString *)videoUrlString toAblum:(NSString *)albumName complition:(MediaSaveComplition)compltion; 39 | 40 | /** 41 | * 是否支持删除相册里的资源 42 | */ 43 | - (BOOL)canDeleteVideoInPhotoLibrary; 44 | 45 | /** 46 | * 删除系统相册里的视频资源 47 | * 48 | * @param videoUrls 一个数组,保存要删除视频的url信息(url形式) 49 | * @param complition 完成回调 50 | */ 51 | - (void)deleteVideosWithUrls:(NSArray *)videoUrls complition:(MediaDeleteComplition)complition; 52 | @end 53 | -------------------------------------------------------------------------------- /pop/pop/PPManagers/PPPermissionManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // SAPermissionManager.h 3 | // GRFoundation 4 | // 5 | // Created by neil on 16/11/21. 6 | // Copyright © 2016年 Tencent. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSInteger, SAAuthorizationType) { 12 | SAAuthorizationTypeUnknown = 0, 13 | SAAuthorizationTypeAudio = 1, 14 | SAAuthorizationTypePhoto = 2, 15 | }; 16 | 17 | 18 | typedef NS_ENUM(NSInteger, SAAuthorizationStatus) { 19 | SAAuthorizationStatusUnknown = 0, 20 | SAAuthorizationStatusNotDetermined = 1, 21 | SAAuthorizationStatusAuthorized = 2, 22 | SAAuthorizationStatusDenied = 3, 23 | }; 24 | 25 | 26 | @interface PPPermissionManager : NSObject 27 | 28 | + (instancetype)sharedInstance; 29 | 30 | /** 当前App是否有某种权限,只进行询问,而不会去请求权限 */ 31 | - (SAAuthorizationStatus)authorizationStatusWithType:(SAAuthorizationType)authorizationType; 32 | 33 | /** 请求授权,与 authorizationStatusWithType:的区别在于当前方法会向系统请求权限。 resultBlock run in main thread */ 34 | - (void)requestAuthorization:(SAAuthorizationType)authorizationType 35 | result:(void (^)(SAAuthorizationStatus status))resultBlock; 36 | 37 | 38 | - (void)checkPhotoLibraryPermission:(void (^)(BOOL hasPermission))block; 39 | 40 | @end 41 | 42 | 43 | @interface PPPermissionManager (Alert) 44 | 45 | /** 展示一个提示开启相册权限弹框 */ 46 | - (void)showPhotoLibraryPermissionAlert; 47 | 48 | - (void)showAlertWithTitle:(NSString *)titile message:(NSString *)message buttons:(NSArray *)buttons clickBlock:(void (^)(NSInteger selectedIndex))block; 49 | 50 | 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/PPMediaProcesser/.DS_Store -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/VideoCompositioner/PPTimeStamp.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPTimeStamp.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/18. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //#define kCMTimeScale 600.0f 12 | 13 | @interface PPTimeStamp : NSObject 14 | 15 | 16 | @property (nonatomic, assign, readonly) CGFloat start; 17 | @property (nonatomic, assign, readonly) CGFloat duration; 18 | 19 | /** 20 | @param start 开始时间,单位是s 21 | @param duration 时长,单位是s 22 | @return 时间戳对象 23 | */ 24 | - (instancetype)initWithStart:(CGFloat)start 25 | duration:(CGFloat)duration; 26 | 27 | + (instancetype)stampWithStart:(CGFloat)start 28 | duration:(CGFloat)duration; 29 | 30 | 31 | 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/VideoCompositioner/PPTimeStamp.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPTimeStamp.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/18. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPTimeStamp.h" 10 | 11 | @implementation PPTimeStamp 12 | 13 | - (instancetype)initWithStart:(CGFloat)start duration:(CGFloat)duration { 14 | self = [super init]; 15 | if (self) { 16 | _start = start; 17 | _duration = duration; 18 | } 19 | return self; 20 | } 21 | 22 | + (instancetype)stampWithStart:(CGFloat)start 23 | duration:(CGFloat)duration { 24 | PPTimeStamp *stamp = [[PPTimeStamp alloc] initWithStart:start duration:duration]; 25 | return stamp; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/VideoCompositioner/PPVideoBaseProcess.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoBaseProcess.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/10. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "PPTimeStamp.h" 12 | 13 | @interface PPVideoBaseProcess : NSObject 14 | 15 | @property(nonatomic, strong) AVAsset *videoAsset; 16 | 17 | - (instancetype)initWithAsset:(AVAsset *)asset; 18 | 19 | //- (instancetype)initWithPHAsset:() 20 | 21 | - (instancetype)initWithURL:(NSURL *)url; 22 | 23 | //- (void)exportDidFinish:(AVAssetExportSession*)session; 24 | 25 | //- (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size; 26 | 27 | - (void)videoOutputWithTimeRange:(PPTimeStamp *)timeStamp 28 | WithCompletion:(void (^)(NSURL *url))completion; 29 | @end 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/VideoCompositioner/PPVideoWatermarkProcess.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoWatermarkProcess.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/10. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPVideoBaseProcess.h" 10 | 11 | @interface PPVideoWatermarkProcess : PPVideoBaseProcess 12 | 13 | @property (nonatomic, strong) UIImage *watermark; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/PPMediaProcesser/VideoCompositioner/PPVideoWatermarkProcess.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoWatermarkProcess.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/10. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPVideoWatermarkProcess.h" 10 | 11 | @implementation PPVideoWatermarkProcess 12 | 13 | - (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size 14 | { 15 | if (!self.watermark) { 16 | //need not add watermark; 17 | return; 18 | } 19 | 20 | // 1 - set up the overlay 21 | CALayer *overlayLayer = [CALayer layer]; 22 | UIImage *overlayImage = self.watermark; 23 | 24 | [overlayLayer setContents:(id)[overlayImage CGImage]]; 25 | overlayLayer.frame = CGRectMake(0, 0, size.width, size.height); 26 | [overlayLayer setMasksToBounds:YES]; 27 | 28 | // 2 - set up the parent layer 29 | CALayer *parentLayer = [CALayer layer]; 30 | CALayer *videoLayer = [CALayer layer]; 31 | parentLayer.frame = CGRectMake(0, 0, size.width, size.height); 32 | videoLayer.frame = CGRectMake(0, 0, size.width, size.height); 33 | [parentLayer addSublayer:videoLayer]; 34 | [parentLayer addSublayer:overlayLayer]; 35 | 36 | // 3 - apply magic 37 | composition.animationTool = [AVVideoCompositionCoreAnimationTool 38 | videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; 39 | 40 | } 41 | @end 42 | -------------------------------------------------------------------------------- /pop/pop/PPStoryBoards/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /pop/pop/PPTest/PPTestCase.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPTestCase.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/10. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPTestCase : NSObject 12 | 13 | + (instancetype)sharedCase; 14 | 15 | 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /pop/pop/PPTest/PPTestCase.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPTestCase.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/10. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPTestCase.h" 10 | 11 | @implementation PPTestCase 12 | 13 | + (instancetype)sharedCase { 14 | static PPTestCase *instance = nil; 15 | if (!instance) { 16 | instance = [[self class] new]; 17 | } 18 | return instance; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPDirectoryManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // SADirectoryManager.h 3 | // GRFoundation 4 | // 5 | // Created by chance on 14/6/2016. 6 | // Copyright © 2016 Tencent. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPUserDefaults.h" 11 | 12 | // 文件夹管理器,负责提供各种文件夹地址 13 | @interface PPDirectoryManager : NSObject 14 | 15 | + (instancetype)sharedManager; 16 | 17 | /** sdk文件夹,基本上sdk中的本地存储文件都放在这里 18 | @note: 文件夹路径 /Documents/GameJoyRecorder 19 | */ 20 | @property (atomic, readonly) NSString *sdkDirectory; 21 | 22 | /** 公共文件夹,负责存放一些与用户无关的数据 23 | @note: 文件夹路径 /Documents/GameJoyRecorder/Share 24 | */ 25 | @property (atomic, readonly) NSString *shareDirectory; 26 | 27 | /** 日志文件夹,负责存放日志文件 28 | @note: 文件夹路径 /Library/Caches/GameJoyRecorderLog 29 | */ 30 | @property (atomic, readonly) NSString *logDirectory; 31 | 32 | /** 临时文件夹,用于存放临时文件 33 | @note: 文件夹路径 /tmp/GameJoyRecorderTemp 34 | */ 35 | @property (atomic, readonly) NSString *tempDirectory; 36 | 37 | /** 临时视频文件夹,负责存放视频相关文件 38 | @note: 文件夹路径 /tmp/GameJoyRecorderTemp/Video 39 | */ 40 | @property (atomic, readonly) NSString *videoDirectory; 41 | 42 | /** 临时音频文件夹,负责存放音频相关文件 43 | @note: 文件夹路径 /tmp/GameJoyRecorderTemp/Audio 44 | */ 45 | @property (atomic, readonly) NSString *tempAudioDirectory; 46 | 47 | /** 48 | 用户文件夹,负责存放用户相关的数据。重要:SDK未登录情况下,返回nil 49 | @note: 文件夹路径 /Documents/GameJoyRecorder/Users/{UserHashID}/ 50 | */ 51 | @property (atomic, readonly) NSString *userDirectory; 52 | 53 | // 切换用户目录,如果HashID为空,则userDirectory也会被置为nil 54 | - (void)switchUserDirectoryWithHashID:(NSString *)hashID; 55 | 56 | 57 | // 清空目录下的所有文件 58 | - (BOOL)cleanDirectory:(NSString *)directoryPath; 59 | 60 | 61 | @end 62 | 63 | 64 | @interface PPUserDefaults (UsingSDKDirectory) 65 | 66 | /** 公共的UserDefaults */ 67 | + (instancetype)sharedUserDefaults; 68 | 69 | /** 当前用户相关的UserDefaults */ 70 | + (instancetype)currentUserDefaults; 71 | 72 | /** 73 | 切换当前用户UserDefaults 74 | @param userDefaultDirectory UserDefaults目录,为空时 [SAUserDefaults currentUserDefaults]返回nil 75 | */ 76 | + (void)switchCurrentUserDefaultsWithPath:(NSString *)userDefaultDirectory; 77 | 78 | 79 | @end 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper+Draw.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPHelper+Draw.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/15. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPHelper.h" 10 | 11 | @interface PPHelper (Draw) 12 | 13 | 14 | + (UIImage *)drawImageForString:(NSString *)string 15 | attributes:(NSDictionary *)attributes 16 | size:(CGSize)size; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper+Draw.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPHelper+Draw.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/15. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPHelper+Draw.h" 10 | #import 11 | 12 | @implementation PPHelper (Draw) 13 | + (UIImage *)drawImageForString:(NSString *)string 14 | attributes:(NSDictionary *)attributes 15 | size:(CGSize)size { 16 | UIGraphicsBeginImageContextWithOptions(size, NO, 0); 17 | [string drawInRect:CGRectMake(0, 0, size.width, size.height) withAttributes:attributes]; 18 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 19 | UIGraphicsEndImageContext(); 20 | 21 | return image; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper+System.h: -------------------------------------------------------------------------------- 1 | // 2 | // Helper+System.h 3 | // guimiquan 4 | // 5 | // Created by Daly on 14/11/27. 6 | // Copyright (c) 2014年 Vanchu. All rights reserved. 7 | // 8 | 9 | #import "PPHelper.h" 10 | 11 | @interface PPHelper (System) 12 | 13 | + (BOOL)isEqualToIOS7; 14 | 15 | + (BOOL)isGreaterOrEqualToIOS7; 16 | 17 | + (BOOL)isGreaterOrEqualToIOS8; 18 | 19 | + (BOOL)isEqualToIPhone6; 20 | 21 | + (BOOL)isEqualToIPhone6Plus; 22 | 23 | + (BOOL)isEqualToSmallScreen; 24 | 25 | + (BOOL)isRetina; 26 | 27 | + (NSString *)getDeviceID; 28 | 29 | + (NSData *)getPushDeviceToken; 30 | 31 | + (NSString *)getPushDeviceTokenStr; 32 | 33 | + (NSString *)getSysModel; 34 | 35 | + (NSString *)getSysName; 36 | 37 | + (NSString *)getSysVersion; 38 | 39 | + (NSString *)deviceString; 40 | 41 | + (NSString *)appVersion; 42 | 43 | + (CGFloat)screenScale; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper+Time.h: -------------------------------------------------------------------------------- 1 | // 2 | // Helper+Time.h 3 | // guimiquan 4 | // 5 | // Created by Chen Rui on 11/20/14. 6 | // Copyright (c) 2014 Vanchu. All rights reserved. 7 | // 8 | 9 | #import "PPHelper.h" 10 | 11 | @interface PPHelper (Time) 12 | 13 | + (void)timeSetTimeout:(float)seconds withFinishBlock:(void (^)())finishBlock; 14 | + (NSTimeInterval)timeNow; 15 | 16 | + (NSString *)formatMMSSForSeconds:(NSInteger)seconds; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper+Time.m: -------------------------------------------------------------------------------- 1 | // 2 | // Helper+Time.m 3 | // guimiquan 4 | // 5 | // Created by Chen Rui on 11/20/14. 6 | // Copyright (c) 2014 Vanchu. All rights reserved. 7 | // 8 | 9 | #import "PPHelper+Time.h" 10 | 11 | @implementation PPHelper (Time) 12 | 13 | + (void)timeSetTimeout:(float)seconds withFinishBlock:(void (^)())finishBlock { 14 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC), dispatch_get_main_queue(), finishBlock); 15 | } 16 | 17 | + (NSTimeInterval)timeNow { 18 | return [NSDate date].timeIntervalSince1970; 19 | } 20 | 21 | + (NSString *)formatMMSSForSeconds:(NSInteger)seconds { 22 | NSInteger second = seconds % 60; 23 | NSInteger minute = seconds / 60; 24 | return [NSString stringWithFormat:@"%.2d:%.2d",(int)minute,(int)second]; 25 | } 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // Helper.h 3 | // guimiquan 4 | // 5 | // Created by Chen Rui on 11/19/14. 6 | // Copyright (c) 2014 Vanchu. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPHelper : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPHelper.m: -------------------------------------------------------------------------------- 1 | // 2 | // Helper.m 3 | // guimiquan 4 | // 5 | // Created by Chen Rui on 11/19/14. 6 | // Copyright (c) 2014 Vanchu. All rights reserved. 7 | // 8 | 9 | #import "PPHelper.h" 10 | 11 | @implementation PPHelper 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPToast.h: -------------------------------------------------------------------------------- 1 | // 2 | // DSToast.h 3 | // DSToast 4 | // 5 | // Created by LS on 8/18/15. 6 | // Copyright (c) 2015 LS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define GMToastDurationShort 0.7 12 | 13 | @interface PPToast : UILabel 14 | 15 | + (instancetype)make:(NSString *)text; 16 | + (instancetype)make:(NSString *)text complete:(void (^)())completeCallback; 17 | 18 | - (void)show; 19 | - (void)showWithDuration:(CGFloat)duration; 20 | @end 21 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/PPUserDefaults.h: -------------------------------------------------------------------------------- 1 | // 2 | // SAUserDefaults.h 3 | // GameJoyRecorderSDK 4 | // 5 | // Created by chance on 9/24/15. 6 | // Copyright (c) 2015 Tencent. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPUserDefaults : NSObject 12 | 13 | - (id)initWithPath:(NSString *)filePath; 14 | 15 | - (id)objectForKey:(NSString *)defaultName; 16 | - (void)setObject:(id)value forKey:(NSString *)defaultName; 17 | - (void)removeObjectForKey:(NSString *)defaultName; 18 | 19 | - (NSString *)stringForKey:(NSString *)defaultName; 20 | - (NSArray *)arrayForKey:(NSString *)defaultName; 21 | - (NSDictionary *)dictionaryForKey:(NSString *)defaultName; 22 | - (NSData *)dataForKey:(NSString *)defaultName; 23 | - (NSInteger)integerForKey:(NSString *)defaultName; 24 | - (float)floatForKey:(NSString *)defaultName; 25 | - (double)doubleForKey:(NSString *)defaultName; 26 | - (BOOL)boolForKey:(NSString *)defaultName; 27 | 28 | - (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName; 29 | - (void)setFloat:(float)value forKey:(NSString *)defaultName; 30 | - (void)setDouble:(double)value forKey:(NSString *)defaultName; 31 | - (void)setBool:(BOOL)value forKey:(NSString *)defaultName; 32 | 33 | - (BOOL)synchronize; 34 | 35 | @end 36 | 37 | 38 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/UIStoryboard+LoadController.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIStoryboard+LoadController.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIStoryboard (LoadController) 12 | 13 | + (UIViewController *)loadControllerWithStoryBoardName:(NSString *)storyBoardName withController:(Class)controller; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/UIStoryboard+LoadController.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIStoryboard+LoadController.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "UIStoryboard+LoadController.h" 10 | 11 | @implementation UIStoryboard (LoadController) 12 | 13 | + (UIViewController *)loadControllerWithStoryBoardName:(NSString *)storyBoardName withController:(Class)controller { 14 | return [[UIStoryboard storyboardWithName:storyBoardName bundle:nil] instantiateViewControllerWithIdentifier:NSStringFromClass(controller)]; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /pop/pop/PPUtils/UIView+FrameMethods.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+FrameMethods.h 3 | // iphoneApp 4 | // 5 | // Created by 李煜 on 13-11-14. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface UIView(FrameMethods) 12 | 13 | @property(nonatomic,assign) CGFloat x; 14 | @property(nonatomic,assign) CGFloat y; 15 | 16 | @property(nonatomic,assign) CGFloat centerX; 17 | @property(nonatomic,assign) CGFloat centerY; 18 | 19 | @property(nonatomic,assign) CGFloat width; 20 | @property(nonatomic,assign) CGFloat height; 21 | 22 | @property(nonatomic,assign) CGSize size; 23 | 24 | //Move methods 25 | 26 | - (void)moveHorizontal:(CGFloat)horizontal vertical:(CGFloat)vertical; 27 | 28 | - (void)moveHorizontal:(CGFloat)horizontal vertical:(CGFloat)vertical addWidth:(CGFloat)widthAdded addHeight:(CGFloat)heightAdded; 29 | 30 | - (void)moveToHorizontal:(CGFloat)horizontal toVertical:(CGFloat)vertical; 31 | 32 | - (void)moveToHorizontal:(CGFloat)horizontal toVertical:(CGFloat)vertical setWidth:(CGFloat)width setHeight:(CGFloat)height; 33 | 34 | //Set width/height 35 | 36 | - (void)setWidth:(CGFloat)width height:(CGFloat)height; 37 | 38 | - (void)setWidth:(CGFloat)width; 39 | 40 | - (void)setHeight:(CGFloat)height; 41 | 42 | //Add orginX/OrginY 43 | 44 | - (void)setOriginX:(CGFloat)x originY:(CGFloat)y; 45 | 46 | - (void)setOriginX:(CGFloat)x; 47 | 48 | - (void)setOriginY:(CGFloat)y; 49 | 50 | //Add width/height 51 | 52 | - (void)addWidth:(CGFloat)widthAdded addHeight:(CGFloat)heightAdded; 53 | 54 | - (void)addWidth:(CGFloat)widthAdded; 55 | 56 | - (void)addHeight:(CGFloat)heightAdded; 57 | 58 | //Set corner radius 59 | 60 | - (void)setCornerRadius:(CGFloat)radius; 61 | 62 | - (void)setCornerRadius:(CGFloat)radius borderColor:(UIColor *)borderColor; 63 | 64 | //Set border 65 | - (void)setBorder:(CGFloat)width borderColor:(UIColor *)borderColor; 66 | 67 | - (CGRect)frameInWindow; 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/PPVideoEdit/.DS_Store -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/PPVideoEdit/ClipView/.DS_Store -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/ICGVideoTrimmer/ICGRulerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICGRulerView.h 3 | // ICGVideoTrimmer 4 | // 5 | // Created by Huong Do on 1/25/15. 6 | // Copyright (c) 2015 ichigo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ICGRulerView : UIView 14 | 15 | @property (assign, nonatomic) CGFloat widthPerSecond; 16 | @property (strong, nonatomic) UIColor *themeColor; 17 | @property (assign, nonatomic) NSInteger labelInterval; 18 | 19 | - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; 20 | 21 | - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; 22 | 23 | - (instancetype)initWithFrame:(CGRect)frame widthPerSecond:(CGFloat)width themeColor:(UIColor *)color labelInterval:(NSInteger)interval NS_DESIGNATED_INITIALIZER; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/ICGVideoTrimmer/ICGThumbView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICGVideoTrimmerLeftOverlay.h 3 | // ICGVideoTrimmer 4 | // 5 | // Created by Huong Do on 1/19/15. 6 | // Copyright (c) 2015 ichigo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ICGThumbView : UIView 14 | 15 | @property (strong, nonatomic, nullable) UIColor *color; 16 | 17 | - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; 18 | 19 | - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; 20 | 21 | - (instancetype)initWithFrame:(CGRect)frame color:(UIColor *)color right:(BOOL)flag NS_DESIGNATED_INITIALIZER; 22 | 23 | - (instancetype)initWithFrame:(CGRect)frame thumbImage:(UIImage *)image NS_DESIGNATED_INITIALIZER; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/ICGVideoTrimmer/ICGVideoTrimmer.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICGVideoTrimmer.h 3 | // ICGVideoTrimmer 4 | // 5 | // Created by Huong Do on 1/29/15. 6 | // Copyright (c) 2015 ichigo. All rights reserved. 7 | // 8 | 9 | #ifndef ICGVideoTrimmer_ICGVideoTrimmer_h 10 | #define ICGVideoTrimmer_ICGVideoTrimmer_h 11 | 12 | #import "ICGVideoTrimmerView.h" 13 | #import "ICGThumbView.h" 14 | #import "ICGRulerView.h" 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/ICGVideoTrimmer/ICGVideoTrimmerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICGVideoTrimmerView.h 3 | // ICGVideoTrimmer 4 | // 5 | // Created by Huong Do on 1/18/15. 6 | // Copyright (c) 2015 ichigo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @protocol ICGVideoTrimmerDelegate; 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | @interface ICGVideoTrimmerView : UIView 17 | 18 | // Video to be trimmed 19 | @property (strong, nonatomic, nullable) AVAsset *asset; 20 | 21 | // Theme color for the trimmer view 22 | @property (strong, nonatomic) UIColor *themeColor; 23 | 24 | // Maximum length for the trimmed video 25 | @property (assign, nonatomic) CGFloat maxLength; 26 | 27 | // Minimum length for the trimmed video 28 | @property (assign, nonatomic) CGFloat minLength; 29 | 30 | // Show ruler view on the trimmer view or not 31 | @property (assign, nonatomic) BOOL showsRulerView; 32 | 33 | // Number of seconds between 34 | @property (assign, nonatomic) NSInteger rulerLabelInterval; 35 | 36 | // Customize color for tracker 37 | @property (strong, nonatomic) UIColor *trackerColor; 38 | 39 | // Custom image for the left thumb 40 | @property (strong, nonatomic, nullable) UIImage *leftThumbImage; 41 | 42 | // Custom image for the right thumb 43 | @property (strong, nonatomic, nullable) UIImage *rightThumbImage; 44 | 45 | // Custom width for the top and bottom borders 46 | @property (assign, nonatomic) CGFloat borderWidth; 47 | 48 | // Custom width for thumb 49 | @property (assign, nonatomic) CGFloat thumbWidth; 50 | 51 | @property (weak, nonatomic, nullable) id delegate; 52 | 53 | - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; 54 | 55 | - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; 56 | 57 | - (instancetype)initWithAsset:(AVAsset *)asset; 58 | 59 | - (instancetype)initWithFrame:(CGRect)frame asset:(AVAsset *)asset NS_DESIGNATED_INITIALIZER; 60 | 61 | - (void)resetSubviews; 62 | 63 | - (void)seekToTime:(CGFloat)startTime; 64 | 65 | - (void)hideTracker:(BOOL)flag; 66 | 67 | // open by neil 2017.10.23 68 | - (void)positionNeedUpdate; 69 | //- (void)notifyDelegateOfDidChange; 70 | 71 | @end 72 | 73 | NS_ASSUME_NONNULL_END 74 | 75 | @protocol ICGVideoTrimmerDelegate 76 | 77 | @optional 78 | - (void)trimmerView:(nonnull ICGVideoTrimmerView *)trimmerView didChangeLeftPosition:(CGFloat)startTime rightPosition:(CGFloat)endTime; 79 | - (void)trimmerViewDidEndEditing:(nonnull ICGVideoTrimmerView *)trimmerView; 80 | 81 | @end 82 | 83 | 84 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ClipView/PPVideoClipView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoClipView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/21. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPVideoEditBaseView.h" 11 | #import "ICGVideoTrimmer.h" 12 | 13 | @class PPVideoClipView; 14 | @protocol PPVideoClipViewDelegate 15 | 16 | - (void)videoClipViewDidCancel:(PPVideoClipView *)clipView; 17 | 18 | - (void)videoClipViewDidComplete:(PPVideoClipView *)clipView; 19 | 20 | @end 21 | 22 | 23 | @interface PPVideoClipView : PPVideoEditBaseView 24 | 25 | @property (nonatomic, weak) id delegate; 26 | 27 | //- (instancetype)initWithFrame:(CGRect)frame videoUrl:(NSURL *)videoUrl; 28 | 29 | - (instancetype)initWithFrame:(CGRect)frame videoAsset:(AVAsset *)asset; 30 | 31 | - (void)seekToTime:(CGFloat)time; 32 | 33 | - (void)hideTracker:(BOOL)hidden; 34 | @end 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/DrawingBoard/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/PPVideoEdit/DrawingBoard/.DS_Store -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/DrawingBoard/PPDrawLayer.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPDrawLayer.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/24. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPDrawLayer : CAShapeLayer 12 | 13 | + (instancetype)layerWithStartPoint:(CGPoint)startPoint; 14 | 15 | - (instancetype)initWithStartPoint:(CGPoint)startPoint NS_DESIGNATED_INITIALIZER; 16 | 17 | 18 | - (void)updatePoint:(CGPoint)newPoint; 19 | 20 | 21 | + (instancetype)new NS_UNAVAILABLE; 22 | 23 | 24 | 25 | 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/DrawingBoard/PPDrawLayer.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPDrawLayer.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/24. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPDrawLayer.h" 10 | #define PPDRAWINGPATHWIDTH 6 11 | #define PPDRAWINGBUFFER 12 12 | #define PPDRAWINGORIGINCOLOR [UIColor whiteColor].CGColor 13 | 14 | @interface PPDrawLayer() 15 | @property (nonatomic, assign) CGPoint previousPoint1; 16 | @property (nonatomic, assign) CGPoint previousPoint2; 17 | @property (nonatomic, assign) CGPoint currentPoint; 18 | 19 | @end 20 | 21 | @implementation PPDrawLayer 22 | 23 | - (instancetype)init { 24 | if (self = [self initWithStartPoint:CGPointZero]) { 25 | [self doInit]; 26 | } 27 | return self; 28 | } 29 | 30 | - (instancetype)initWithStartPoint:(CGPoint)startPoint { 31 | if (self = [super init]) { 32 | [self doInit]; 33 | self.previousPoint2 = self.previousPoint1 = self.currentPoint = startPoint; 34 | } 35 | return self; 36 | } 37 | 38 | - (void)doInit { 39 | self.frame = [UIScreen mainScreen].bounds; 40 | self.lineJoin = kCALineJoinRound; 41 | self.lineCap = kCALineCapRound; 42 | self.strokeColor = self.fillColor = PPDRAWINGORIGINCOLOR; 43 | self.lineWidth = PPDRAWINGPATHWIDTH; 44 | } 45 | 46 | + (instancetype)layerWithStartPoint:(CGPoint)startPoint { 47 | PPDrawLayer *layer = [[[self class] alloc] initWithStartPoint:startPoint]; 48 | UIBezierPath *path = [UIBezierPath bezierPath]; 49 | path.lineJoinStyle = kCGLineJoinRound; 50 | [path moveToPoint:startPoint]; 51 | layer.path = path.CGPath; 52 | return layer; 53 | } 54 | 55 | - (void)updatePoint:(CGPoint)newPoint { 56 | self.previousPoint2 = self.previousPoint1; 57 | self.previousPoint1 = self.currentPoint; 58 | self.currentPoint = newPoint; 59 | } 60 | 61 | - (void)drawInContext:(CGContextRef)ctx { 62 | CGPoint mid1 = midPoint(self.previousPoint1, self.previousPoint2); 63 | CGPoint mid2 = midPoint(self.currentPoint, self.previousPoint1); 64 | 65 | UIBezierPath *path = [UIBezierPath bezierPathWithCGPath:self.path]; 66 | self.strokeColor = [UIColor whiteColor].CGColor; 67 | [path moveToPoint:mid1]; 68 | [path addQuadCurveToPoint:mid2 controlPoint:self.previousPoint1]; 69 | self.path = path.CGPath; 70 | } 71 | 72 | CGPoint midPoint(CGPoint p1, CGPoint p2) 73 | { 74 | return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5); 75 | } 76 | @end 77 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/Emoji/PPEmojiCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPEmojiCell.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/12. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PPEmojiCell : UICollectionViewCell 12 | 13 | - (void)feedData:(UIImage *)image; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/Emoji/PPEmojiCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPEmojiCell.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/12. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPEmojiCell.h" 10 | 11 | @interface PPEmojiCell () 12 | @property (weak, nonatomic) IBOutlet UIImageView *imageView; 13 | 14 | @end 15 | 16 | @implementation PPEmojiCell 17 | 18 | - (void)awakeFromNib { 19 | [super awakeFromNib]; 20 | // Initialization code 21 | } 22 | 23 | - (void)feedData:(UIImage *)image { 24 | self.imageView.image = image; 25 | } 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ImageEditView/PPImageEditView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPImageEditView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/25. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPRenderResult.h" 11 | 12 | @protocol PPImageEditViewDelegate; 13 | @interface PPImageEditView : UIView 14 | @property (nonatomic, weak) id delegate; 15 | //@property (nonatomic, assign) CGSize currentSize; 16 | 17 | @property (nonatomic, assign) CGFloat scaleValue; 18 | //- (void)setImage:(UIImage *)image; 19 | 20 | - (void)render:(PPRenderResult *)result; 21 | 22 | @end 23 | 24 | 25 | @protocol PPImageEditViewDelegate 26 | 27 | @required 28 | - (BOOL)imageEditView:(PPImageEditView *)editView willMoveWithVector:(CGPoint)vector; 29 | 30 | @optional 31 | - (void)imageEditViewDidTap:(PPImageEditView *)editView; 32 | 33 | 34 | //- (void)imageEditView:(PPImageEditView *)editView didPinch:(UIPinchGestureRecognizer *)pinch; 35 | // 36 | //- (void)imageEditView:(PPImageEditView *)editView didRotation:(UIRotationGestureRecognizer *)rotation; 37 | 38 | - (void)imageEditViewDidDragStart:(PPImageEditView *)editView; 39 | 40 | 41 | - (void)imageEditViewDidDragMoving:(PPImageEditView *)editView; 42 | 43 | - (void)imageEditViewDidDragEnd:(PPImageEditView *)editView withPointInWindow:(CGPoint)point; 44 | 45 | 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/ImageEditView/PPImageEditView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoEditBaseView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoEditBaseView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/26. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol PPVideoEditBaseViewProtocol; 12 | @interface PPVideoEditBaseView : UIView 13 | 14 | @property (nonatomic, weak) id delegate; 15 | 16 | 17 | /** 18 | 是否自带工具栏 19 | */ 20 | - (BOOL)useSelfToolBar; 21 | /** 22 | 展示该视图,该方法由子类重写,要注意的是:该方法有可能会多次调用,所以一些初始化操作最好不要放里面 23 | */ 24 | - (void)showSelf; 25 | 26 | /** 27 | 隐藏该视图,该方法由子类重写,要注意的是:该方法有可能会多次调用,所以一些初始化操作最好不要放里面 28 | */ 29 | - (void)hiddenSelf; 30 | @end 31 | 32 | @protocol PPVideoEditBaseViewProtocol 33 | 34 | - (void)editViewWillShow:(PPVideoEditBaseView *)view; 35 | 36 | - (void)editViewWillHidden:(PPVideoEditBaseView *)view; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoEditBaseView.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoEditBaseView.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/26. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPVideoEditBaseView.h" 10 | 11 | @implementation PPVideoEditBaseView 12 | 13 | - (BOOL)useSelfToolBar { 14 | /// implement by subclass; 15 | return NO; 16 | } 17 | 18 | - (void)showSelf { 19 | /// implement by subclass; 20 | self.hidden = NO; 21 | if ([self.delegate respondsToSelector:@selector(editViewWillShow:)]) { 22 | [self.delegate editViewWillShow:self]; 23 | } 24 | } 25 | 26 | - (void)hiddenSelf { 27 | /// implement by subclass; 28 | self.hidden = YES; 29 | if ([self.delegate respondsToSelector:@selector(editViewWillHidden:)]) { 30 | [self.delegate editViewWillHidden:self]; 31 | } 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoEditController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoEditController.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | #import "PPVideoEditDefines.h" 13 | 14 | @interface PPVideoEditController : PPBasicController 15 | 16 | 17 | - (void)loadViewWithPHAsset:(PHAsset *)asset; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoEditDefines.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoEditDefines.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/14. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #ifndef PPVideoEditDefines_h 10 | #define PPVideoEditDefines_h 11 | 12 | #ifndef kCMTimeScale 13 | #define kCMTimeScale 600.0f 14 | #endif 15 | 16 | typedef NS_ENUM(NSInteger, PPRenderSourceType) { 17 | PPRenderSourceTypeNone = 0, 18 | PPRenderSourceTypeEmoji = 1, 19 | PPRenderSourceTypeDraw = 2, 20 | PPRenderSourceTypeText = 3, 21 | }; 22 | 23 | #ifndef PPRenderSourceTypeStr 24 | #define PPRenderSourceTypeStr NSString 25 | #endif 26 | 27 | #ifndef PPVideoEditOptionStr 28 | #define PPVideoEditOptionStr NSString 29 | #endif 30 | 31 | NSString *stringWithImageSourceType(PPRenderSourceType input); 32 | 33 | typedef NS_ENUM(NSInteger, PPVideoEditOption) { 34 | PPVideoEditOptionClip = 0, 35 | PPVideoEditOptionEmoji = 1, 36 | PPVideoEditOptionDraw = 2, 37 | PPVideoEditOptionText = 3, 38 | }; 39 | 40 | NSString *stringWithEditOption(PPVideoEditOption input); 41 | 42 | PPRenderSourceType editOption2SourceType(PPVideoEditOption editOption); 43 | 44 | PPVideoEditOption sourceType2EditOption(PPRenderSourceType type); 45 | 46 | #endif /* PPVideoEditDefines_h */ 47 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoEditDefines.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoEditDefines.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/14. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPVideoEditDefines.h" 11 | 12 | NSString *stringWithEditOption(PPVideoEditOption input) { 13 | NSArray *PPVideoEditOptions = @[@"PPVideoEditOptionClip", 14 | @"PPVideoEditOptionEmoji", 15 | @"PPVideoEditOptionDraw", 16 | @"PPVideoEditOptionText"]; 17 | return (NSString *)[PPVideoEditOptions objectAtIndex:input]; 18 | } 19 | 20 | NSString *stringWithImageSourceType(PPRenderSourceType input) { 21 | NSArray *PPImageSourceTypes = @[@"PPImageSourceTypeNone", 22 | @"PPImageSourceTypeEmoji", 23 | @"PPImageSourceTypeDraw", 24 | @"PPImageSourceTypeText"]; 25 | return (NSString *)[PPImageSourceTypes objectAtIndex:input]; 26 | } 27 | 28 | PPRenderSourceType editOption2SourceType(PPVideoEditOption editOption){ 29 | return (PPRenderSourceType)editOption; 30 | } 31 | 32 | PPVideoEditOption sourceType2EditOption(PPRenderSourceType type) { 33 | return (PPVideoEditOption)type; 34 | } 35 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/PPVideoPlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPVideoPlayView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/12. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | @class AVPlayer; 11 | 12 | @interface PPVideoPlayView : UIView 13 | @property (nonatomic, strong, readonly) AVPlayer* player; 14 | 15 | - (void)setPlayer:(AVPlayer *)player displayFullScreen:(BOOL)fullScreen; 16 | //- (void)setVideoFillMode:(NSString *)fillMode; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPCanvasView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPCanvasView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/21. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import 12 | #import "PPRenderResult.h" 13 | #import "PPRenderTextResult.h" 14 | 15 | @protocol PPCanvasViewDelegate; 16 | 17 | /** 18 | 画布视图,表情,文字以及绘制,最终均会展示在该视图上 19 | */ 20 | @interface PPCanvasView : UIView 21 | @property (nonatomic, weak) id delegate; 22 | 23 | 24 | - (void)render:(PPRenderResult *)result; 25 | /** 26 | 将所有的操作生成为一张图片 27 | 28 | @return 生成的图片 29 | */ 30 | - (UIImage *)generateImage; 31 | 32 | - (void)removeObserver; 33 | 34 | @end 35 | 36 | @protocol PPCanvasViewDelegate 37 | 38 | - (void)canvasView:(PPCanvasView *)canvasView didTapText:(PPRenderTextResult *)text; 39 | 40 | - (void)canvasViewBeginEdit:(PPCanvasView *)canvasView; 41 | 42 | - (void)canvasViewEndEdit:(PPCanvasView *)canvasView; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderEmojiResult.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderEmojiResult.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderResult.h" 10 | 11 | @interface PPRenderEmojiResult : PPRenderResult 12 | 13 | @property (nonatomic, strong) UIImage *content; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderEmojiResult.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderEmojiResult.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderEmojiResult.h" 10 | 11 | @interface PPRenderEmojiResult() 12 | { 13 | UIImage *_content; 14 | } 15 | @end 16 | 17 | @implementation PPRenderEmojiResult 18 | 19 | @dynamic content; 20 | 21 | - (UIImage *)content { 22 | return _content; 23 | } 24 | 25 | - (void)setContent:(UIImage *)content { 26 | _content = content; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderLayerResult.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderLayerResult.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/9. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderResult.h" 10 | 11 | @interface PPRenderLayerResult : PPRenderResult 12 | 13 | @property (nonatomic, strong) CALayer *content; 14 | 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderLayerResult.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderLayerResult.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/9. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderLayerResult.h" 10 | 11 | @interface PPRenderLayerResult() 12 | { 13 | CALayer *_layer; 14 | } 15 | @end 16 | 17 | @implementation PPRenderLayerResult 18 | @dynamic content; 19 | 20 | - (void)setContent:(CALayer *)content { 21 | _layer = content; 22 | } 23 | 24 | - (CALayer *)content { 25 | return _layer; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderResult.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderResult.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/21. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPRenderResultDefines.h" 11 | 12 | @interface PPRenderResult : NSObject 13 | 14 | @property (nonatomic, assign, readonly) NSInteger tagId; 15 | 16 | @property (nonatomic, strong) id content; //subclass attribute 17 | @property (nonatomic, assign, readonly) PPRenderResultType type; 18 | @property (nonatomic, assign) CGRect frame; 19 | 20 | 21 | - (instancetype)init UNAVAILABLE_ATTRIBUTE; 22 | + (instancetype)new UNAVAILABLE_ATTRIBUTE; 23 | 24 | + (instancetype)renderResultWithType:(PPRenderResultType )type; 25 | @end 26 | 27 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderResult.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderResult.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/21. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderResult.h" 10 | #import "PPRenderLayerResult.h" 11 | #import "PPRenderEmojiResult.h" 12 | #import "PPRenderTextResult.h" 13 | 14 | @interface PPRenderResult() 15 | @property (nonatomic, assign, readwrite) NSInteger tagId; 16 | @property (nonatomic, assign, readwrite) PPRenderResultType type; 17 | 18 | @end 19 | 20 | 21 | @implementation PPRenderResult 22 | 23 | static NSInteger kLastTag = 666; 24 | 25 | - (instancetype)initPrivate 26 | { 27 | self = [super init]; 28 | if (self) { 29 | self.tagId = kLastTag + 1; 30 | kLastTag++; 31 | } 32 | return self; 33 | } 34 | 35 | + (instancetype)renderResultWithType:(PPRenderResultType )type { 36 | PPRenderResult *result = nil; 37 | switch (type) { 38 | case PPRenderResultTypeLayer: 39 | { 40 | PPRenderLayerResult *layerResult = [[PPRenderLayerResult alloc] initPrivate]; 41 | result = layerResult; 42 | } 43 | break; 44 | case PPRenderResultTypeEmoji: 45 | { 46 | PPRenderEmojiResult *emojiResult = [[PPRenderEmojiResult alloc] initPrivate]; 47 | result = emojiResult; 48 | } 49 | break; 50 | case PPRenderResultTypeText: 51 | { 52 | PPRenderTextResult *textResult = [[PPRenderTextResult alloc] initPrivate]; 53 | result = textResult; 54 | } 55 | break; 56 | default: 57 | { 58 | NSLog(@"error: unknown PPRenderResultType: %d",type); 59 | } 60 | break; 61 | } 62 | result.type = type; 63 | return result; 64 | } 65 | 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderResultDefines.h: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // PPRenderResultDefines.h 4 | // pop 5 | // 6 | // Created by neil on 2017/10/9. 7 | // Copyright © 2017年 neil. All rights reserved. 8 | // 9 | 10 | #ifndef PPRenderResultDefines_h 11 | #define PPRenderResultDefines_h 12 | typedef NS_ENUM(NSInteger,PPRenderResultType) { 13 | PPRenderResultTypeLayer = 0, 14 | PPRenderResultTypeEmoji = 1, 15 | PPRenderResultTypeText = 2, 16 | }; 17 | 18 | #ifndef PPRenderTextResultDidChangeStateNotification 19 | #define PPRenderTextResultDidChangeStateNotification @"PPRenderTextResultDidChangeStateNotification" 20 | #endif 21 | 22 | #endif /* PPRenderResultDefines_h */ 23 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderTextResult.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderTextResult.h 3 | // pop 4 | // 5 | // Created by neil on 2017/10/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderResult.h" 10 | 11 | 12 | typedef NS_ENUM(NSInteger,PPRenderTextState) { 13 | PPRenderTextStateShow = 0, 14 | PPRenderTextStateEditing = 1, 15 | PPRenderTextStateRemove = 2, 16 | }; 17 | 18 | @interface PPRenderTextResult : PPRenderResult 19 | @property (nonatomic, strong) UIImage *content; 20 | @property (nonatomic, strong) NSString *text; 21 | @property (nonatomic, strong) NSDictionary *attributes; 22 | 23 | 24 | @property (nonatomic, assign, readonly)PPRenderTextState currentState; 25 | 26 | - (void)changeCurrentState:(PPRenderTextState)state; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderResult/PPRenderTextResult.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPRenderTextResult.m 3 | // pop 4 | // 5 | // Created by neil on 2017/10/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderTextResult.h" 10 | 11 | @interface PPRenderTextResult() 12 | { 13 | UIImage *_content; 14 | PPRenderTextState _currentState; 15 | } 16 | @end 17 | 18 | @implementation PPRenderTextResult 19 | 20 | 21 | @dynamic content; 22 | 23 | - (void)setContent:(UIImage *)content { 24 | _content = content; 25 | } 26 | 27 | - (UIImage *)content { 28 | return _content; 29 | } 30 | 31 | - (PPRenderTextState)currentState { 32 | return _currentState; 33 | } 34 | 35 | - (void)changeCurrentState:(PPRenderTextState)state { 36 | _currentState = state; 37 | [[NSNotificationCenter defaultCenter] postNotificationName:PPRenderTextResultDidChangeStateNotification object:self]; 38 | } 39 | 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/PPVideoEdit/RenderSource/.DS_Store -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/PPDrawSourceView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JVDrawingView.h 3 | // JVDrawingBoard 4 | // 5 | // Created by AVGD-Jarvi on 17/4/2. 6 | // Copyright © 2017年 Jarvi. All rights reserved. 7 | // 8 | 9 | #import 10 | //#import "PPDrawingLayer.h" 11 | #import "PPRenderSourceView.h" 12 | 13 | @interface PPDrawSourceView : PPRenderSourceView 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/PPEmojiSourceView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPEmojiView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/12. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPRenderSourceView.h" 11 | 12 | @protocol PPEmojiViewDelegate; 13 | @interface PPEmojiSourceView : PPRenderSourceView 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/PPRenderSourceView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPImageSourceView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/13. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPVideoEditDefines.h" 11 | #import "PPRenderResult.h" 12 | #import "PPVideoEditBaseView.h" 13 | 14 | @class PPRenderSourceView; 15 | @protocol PPRenderSourceViewDelegate 16 | 17 | 18 | /** 19 | 源视图代理方法 20 | 21 | @param view 当前处理的视图 22 | @param result 渲染结果,可能是一个表情,可能是笔画,也可能是文字,该值可能为nil. 23 | */ 24 | - (void)sourceView:(PPRenderSourceView *)view didOutput:(PPRenderResult *)result; 25 | 26 | @end 27 | 28 | @interface PPRenderSourceView : PPVideoEditBaseView 29 | 30 | @property (nonatomic, weak) id delegate; 31 | 32 | + (PPRenderSourceView *)sourceViewWithSourceType:(PPRenderSourceType)type; 33 | 34 | @end 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/PPRenderSourceView.m: -------------------------------------------------------------------------------- 1 | // 2 | // PPImageSourceView.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/13. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import "PPRenderSourceView.h" 10 | #import "PPDrawSourceView.h" 11 | #import "PPTextSourceView.h" 12 | #import "PPEmojiSourceView.h" 13 | 14 | @interface PPRenderSourceView() 15 | { 16 | __weak id _delegate; 17 | } 18 | @end 19 | 20 | @implementation PPRenderSourceView 21 | @dynamic delegate; 22 | 23 | + (PPRenderSourceView *)sourceViewWithSourceType:(PPRenderSourceType)type { 24 | PPRenderSourceView *source = nil; 25 | switch (type) { 26 | case PPRenderSourceTypeEmoji: 27 | source = [[PPEmojiSourceView alloc] initWithFrame:CGRectZero]; 28 | break; 29 | case PPRenderSourceTypeDraw: 30 | source = [[PPDrawSourceView alloc] initWithFrame:CGRectZero]; 31 | break; 32 | case PPRenderSourceTypeText: 33 | source = [[PPTextSourceView alloc] initWithFrame:CGRectZero]; 34 | break; 35 | default: 36 | break; 37 | } 38 | return source; 39 | } 40 | 41 | //- (void)showSelf { 42 | // [super showSelf]; 43 | //} 44 | // 45 | //- (void)hiddenSelf { 46 | // [super hiddenSelf]; 47 | //} 48 | 49 | //- (BOOL)useSelfToolBar { 50 | // // !!!must implement by subclass 51 | // return YES; 52 | //} 53 | 54 | - (void)setDelegate:(id)delegate { 55 | _delegate = delegate; 56 | } 57 | 58 | - (id )delegate { 59 | return _delegate; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /pop/pop/PPVideoEdit/RenderSource/PPTextSourceView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PPTextImageView.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/13. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PPRenderSourceView.h" 11 | 12 | @class PPTextSourceView; 13 | @protocol PPTextSourceViewDelegate 14 | @required 15 | 16 | - (void)textSourceViewCancelEdit:(PPTextSourceView *)textView; 17 | @end 18 | 19 | @interface PPTextSourceView : PPRenderSourceView 20 | @property (nonatomic, weak) id delegate; 21 | 22 | @property (nonatomic, assign, readonly) BOOL isNewText; 23 | 24 | @property (nonatomic, strong) NSString *originText; 25 | 26 | @end 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/.DS_Store -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/NSBundle+TZImagePicker.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+TZImagePicker.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 16/08/18. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSBundle (TZImagePicker) 12 | 13 | + (NSBundle *)tz_imagePickerBundle; 14 | 15 | + (NSString *)tz_localizedStringForKey:(NSString *)key value:(NSString *)value; 16 | + (NSString *)tz_localizedStringForKey:(NSString *)key; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/NSBundle+TZImagePicker.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+TZImagePicker.m 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 16/08/18. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import "NSBundle+TZImagePicker.h" 10 | #import "TZImagePickerController.h" 11 | 12 | @implementation NSBundle (TZImagePicker) 13 | 14 | + (NSBundle *)tz_imagePickerBundle { 15 | NSBundle *bundle = [NSBundle bundleForClass:[TZImagePickerController class]]; 16 | NSURL *url = [bundle URLForResource:@"TZImagePickerController" withExtension:@"bundle"]; 17 | bundle = [NSBundle bundleWithURL:url]; 18 | return bundle; 19 | } 20 | 21 | + (NSString *)tz_localizedStringForKey:(NSString *)key { 22 | return [self tz_localizedStringForKey:key value:@""]; 23 | } 24 | 25 | + (NSString *)tz_localizedStringForKey:(NSString *)key value:(NSString *)value { 26 | static NSBundle *bundle = nil; 27 | if (bundle == nil) { 28 | NSString *language = [NSLocale preferredLanguages].firstObject; 29 | if ([language rangeOfString:@"zh-Hans"].location != NSNotFound) { 30 | language = @"zh-Hans"; 31 | } else { 32 | language = @"en"; 33 | } 34 | bundle = [NSBundle bundleWithPath:[[NSBundle tz_imagePickerBundle] pathForResource:language ofType:@"lproj"]]; 35 | } 36 | NSString *value1 = [bundle localizedStringForKey:key value:value table:nil]; 37 | return value1; 38 | } 39 | @end 40 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZAssetCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZAssetCell.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | typedef enum : NSUInteger { 13 | TZAssetCellTypePhoto = 0, 14 | TZAssetCellTypeLivePhoto, 15 | TZAssetCellTypePhotoGif, 16 | TZAssetCellTypeVideo, 17 | TZAssetCellTypeAudio, 18 | } TZAssetCellType; 19 | 20 | @class TZAssetModel; 21 | @interface TZAssetCell : UICollectionViewCell 22 | 23 | @property (weak, nonatomic) UIButton *selectPhotoButton; 24 | @property (nonatomic, strong) TZAssetModel *model; 25 | @property (nonatomic, copy) void (^didSelectPhotoBlock)(BOOL); 26 | @property (nonatomic, assign) TZAssetCellType type; 27 | @property (nonatomic, assign) BOOL allowPickingGif; 28 | @property (nonatomic, assign) BOOL allowPickingMultipleVideo; 29 | @property (nonatomic, copy) NSString *representedAssetIdentifier; 30 | @property (nonatomic, assign) int32_t imageRequestID; 31 | 32 | @property (nonatomic, copy) NSString *photoSelImageName; 33 | @property (nonatomic, copy) NSString *photoDefImageName; 34 | 35 | @property (nonatomic, assign) BOOL showSelectBtn; 36 | @property (assign, nonatomic) BOOL allowPreview; 37 | 38 | @end 39 | 40 | 41 | @class TZAlbumModel; 42 | 43 | @interface TZAlbumCell : UITableViewCell 44 | 45 | @property (nonatomic, strong) TZAlbumModel *model; 46 | @property (weak, nonatomic) UIButton *selectedCountButton; 47 | 48 | @end 49 | 50 | 51 | @interface TZAssetCameraCell : UICollectionViewCell 52 | 53 | @property (nonatomic, strong) UIImageView *imageView; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZAssetModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZAssetModel.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | typedef enum : NSUInteger { 13 | TZAssetModelMediaTypePhoto = 0, 14 | TZAssetModelMediaTypeLivePhoto, 15 | TZAssetModelMediaTypePhotoGif, 16 | TZAssetModelMediaTypeVideo, 17 | TZAssetModelMediaTypeAudio 18 | } TZAssetModelMediaType; 19 | 20 | @class PHAsset; 21 | @interface TZAssetModel : NSObject 22 | 23 | @property (nonatomic, strong) id asset; ///< PHAsset or ALAsset 24 | @property (nonatomic, assign) BOOL isSelected; ///< The select status of a photo, default is No 25 | @property (nonatomic, assign) TZAssetModelMediaType type; 26 | @property (nonatomic, copy) NSString *timeLength; 27 | 28 | /// Init a photo dataModel With a asset 29 | /// 用一个PHAsset/ALAsset实例,初始化一个照片模型 30 | + (instancetype)modelWithAsset:(id)asset type:(TZAssetModelMediaType)type; 31 | + (instancetype)modelWithAsset:(id)asset type:(TZAssetModelMediaType)type timeLength:(NSString *)timeLength; 32 | 33 | @end 34 | 35 | 36 | @class PHFetchResult; 37 | @interface TZAlbumModel : NSObject 38 | 39 | @property (nonatomic, strong) NSString *name; ///< The album name 40 | @property (nonatomic, assign) NSInteger count; ///< Count of photos the album contain 41 | @property (nonatomic, strong) id result; ///< PHFetchResult or ALAssetsGroup 42 | 43 | @property (nonatomic, strong) NSArray *models; 44 | @property (nonatomic, strong) NSArray *selectedModels; 45 | @property (nonatomic, assign) NSUInteger selectedCount; 46 | 47 | @property (nonatomic, assign) BOOL isCameraRoll; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZAssetModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // TZAssetModel.m 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import "TZAssetModel.h" 10 | #import "TZImageManager.h" 11 | 12 | @implementation TZAssetModel 13 | 14 | + (instancetype)modelWithAsset:(id)asset type:(TZAssetModelMediaType)type{ 15 | TZAssetModel *model = [[TZAssetModel alloc] init]; 16 | model.asset = asset; 17 | model.isSelected = NO; 18 | model.type = type; 19 | return model; 20 | } 21 | 22 | + (instancetype)modelWithAsset:(id)asset type:(TZAssetModelMediaType)type timeLength:(NSString *)timeLength { 23 | TZAssetModel *model = [self modelWithAsset:asset type:type]; 24 | model.timeLength = timeLength; 25 | return model; 26 | } 27 | 28 | @end 29 | 30 | 31 | 32 | @implementation TZAlbumModel 33 | 34 | - (void)setResult:(id)result { 35 | _result = result; 36 | BOOL allowPickingImage = [[[NSUserDefaults standardUserDefaults] objectForKey:@"tz_allowPickingImage"] isEqualToString:@"1"]; 37 | BOOL allowPickingVideo = [[[NSUserDefaults standardUserDefaults] objectForKey:@"tz_allowPickingVideo"] isEqualToString:@"1"]; 38 | [[TZImageManager manager] getAssetsFromFetchResult:result allowPickingVideo:allowPickingVideo allowPickingImage:allowPickingImage completion:^(NSArray *models) { 39 | _models = models; 40 | if (_selectedModels) { 41 | [self checkSelectedModels]; 42 | } 43 | }]; 44 | } 45 | 46 | - (void)setSelectedModels:(NSArray *)selectedModels { 47 | _selectedModels = selectedModels; 48 | if (_models) { 49 | [self checkSelectedModels]; 50 | } 51 | } 52 | 53 | - (void)checkSelectedModels { 54 | self.selectedCount = 0; 55 | NSMutableArray *selectedAssets = [NSMutableArray array]; 56 | for (TZAssetModel *model in _selectedModels) { 57 | [selectedAssets addObject:model.asset]; 58 | } 59 | for (TZAssetModel *model in _models) { 60 | if ([[TZImageManager manager] isAssetsArray:selectedAssets containAsset:model.asset]) { 61 | self.selectedCount ++; 62 | } 63 | } 64 | } 65 | 66 | - (NSString *)name { 67 | if (_name) { 68 | return _name; 69 | } 70 | return @""; 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZGifPhotoPreviewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZGifPhotoPreviewController.h 3 | // TZImagePickerController 4 | // 5 | // Created by ttouch on 2016/12/13. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class TZAssetModel; 12 | @interface TZGifPhotoPreviewController : UIViewController 13 | 14 | @property (nonatomic, strong) TZAssetModel *model; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImageCropManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZImageCropManager.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 2016/12/5. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 图片裁剪管理类 8 | 9 | #import 10 | #import 11 | 12 | @interface TZImageCropManager : NSObject 13 | 14 | /// 裁剪框背景的处理 15 | + (void)overlayClippingWithView:(UIView *)view cropRect:(CGRect)cropRect containerView:(UIView *)containerView needCircleCrop:(BOOL)needCircleCrop; 16 | 17 | /* 18 | 1.7.2 为了解决多位同学对于图片裁剪的需求,我这两天有空便在研究图片裁剪 19 | 幸好有tuyou的PhotoTweaks库做参考,裁剪的功能实现起来简单许多 20 | 该方法和其内部引用的方法基本来自于tuyou的PhotoTweaks库,我做了稍许删减和修改 21 | 感谢tuyou同学在github开源了优秀的裁剪库PhotoTweaks,表示感谢 22 | PhotoTweaks库的github链接:https://github.com/itouch2/PhotoTweaks 23 | */ 24 | /// 获得裁剪后的图片 25 | + (UIImage *)cropImageView:(UIImageView *)imageView toRect:(CGRect)rect zoomScale:(double)zoomScale containerView:(UIView *)containerView; 26 | 27 | /// 获取圆形图片 28 | + (UIImage *)circularClipImage:(UIImage *)image; 29 | 30 | @end 31 | 32 | 33 | /// 该分类的代码来自SDWebImage:https://github.com/rs/SDWebImage 34 | /// 为了防止冲突,我将分类名字和方法名字做了修改 35 | @interface UIImage (TZGif) 36 | 37 | + (UIImage *)sd_tz_animatedGIFWithData:(NSData *)data; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/Root.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | StringsTable 6 | Root 7 | PreferenceSpecifiers 8 | 9 | 10 | Type 11 | PSGroupSpecifier 12 | Title 13 | Group 14 | 15 | 16 | Type 17 | PSTextFieldSpecifier 18 | Title 19 | Name 20 | Key 21 | name_preference 22 | DefaultValue 23 | 24 | IsSecure 25 | 26 | KeyboardType 27 | Alphabet 28 | AutocapitalizationType 29 | None 30 | AutocorrectionType 31 | No 32 | 33 | 34 | Type 35 | PSToggleSwitchSpecifier 36 | Title 37 | Enabled 38 | Key 39 | enabled_preference 40 | DefaultValue 41 | 42 | 43 | 44 | Type 45 | PSSliderSpecifier 46 | Key 47 | slider_preference 48 | DefaultValue 49 | 0.5 50 | MinimumValue 51 | 0 52 | MaximumValue 53 | 1 54 | MinimumValueImage 55 | 56 | MaximumValueImage 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/VideoSendIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/VideoSendIcon@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/navi_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/navi_back@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_def_previewVc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_def_previewVc@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_number_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_number_icon@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_original_def@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_original_def@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_original_sel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_original_sel@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_sel_previewVc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/photo_sel_previewVc@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/preview_number_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/preview_number_icon@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/preview_original_def@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/preview_original_def@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/takePicture@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/takePicture@2x.png -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZLocationManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZLocationManager.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 2017/06/03. 6 | // Copyright © 2017年 谭真. All rights reserved. 7 | // 定位管理类 8 | 9 | 10 | #import 11 | #import 12 | 13 | @interface TZLocationManager : NSObject 14 | 15 | + (instancetype)manager; 16 | 17 | /// 开始定位 18 | - (void)startLocation; 19 | - (void)startLocationWithSuccessBlock:(void (^)(CLLocation *location,CLLocation *oldLocation))successBlock failureBlock:(void (^)(NSError *error))failureBlock; 20 | - (void)startLocationWithGeocoderBlock:(void (^)(NSArray *geocoderArray))geocoderBlock; 21 | - (void)startLocationWithSuccessBlock:(void (^)(CLLocation *location,CLLocation *oldLocation))successBlock failureBlock:(void (^)(NSError *error))failureBlock geocoderBlock:(void (^)(NSArray *geocoderArray))geocoderBlock; 22 | 23 | @end 24 | 25 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZPhotoPickerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZPhotoPickerController.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class TZAlbumModel; 12 | @interface TZPhotoPickerController : UIViewController 13 | 14 | @property (nonatomic, assign) BOOL isFirstAppear; 15 | @property (nonatomic, assign) NSInteger columnNumber; 16 | @property (nonatomic, strong) TZAlbumModel *model; 17 | @end 18 | 19 | 20 | @interface TZCollectionView : UICollectionView 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZPhotoPreviewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZPhotoPreviewCell.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class TZAssetModel; 12 | @interface TZAssetPreviewCell : UICollectionViewCell 13 | @property (nonatomic, strong) TZAssetModel *model; 14 | @property (nonatomic, copy) void (^singleTapGestureBlock)(); 15 | - (void)configSubviews; 16 | - (void)photoPreviewCollectionViewDidScroll; 17 | @end 18 | 19 | 20 | @class TZAssetModel,TZProgressView,TZPhotoPreviewView; 21 | @interface TZPhotoPreviewCell : TZAssetPreviewCell 22 | 23 | @property (nonatomic, copy) void (^imageProgressUpdateBlock)(double progress); 24 | 25 | @property (nonatomic, strong) TZPhotoPreviewView *previewView; 26 | 27 | @property (nonatomic, assign) BOOL allowCrop; 28 | @property (nonatomic, assign) CGRect cropRect; 29 | 30 | - (void)recoverSubviews; 31 | 32 | @end 33 | 34 | 35 | @interface TZPhotoPreviewView : UIView 36 | @property (nonatomic, strong) UIImageView *imageView; 37 | @property (nonatomic, strong) UIScrollView *scrollView; 38 | @property (nonatomic, strong) UIView *imageContainerView; 39 | @property (nonatomic, strong) TZProgressView *progressView; 40 | 41 | @property (nonatomic, assign) BOOL allowCrop; 42 | @property (nonatomic, assign) CGRect cropRect; 43 | 44 | @property (nonatomic, strong) TZAssetModel *model; 45 | @property (nonatomic, strong) id asset; 46 | @property (nonatomic, copy) void (^singleTapGestureBlock)(); 47 | @property (nonatomic, copy) void (^imageProgressUpdateBlock)(double progress); 48 | 49 | @property (nonatomic, assign) int32_t imageRequestID; 50 | 51 | - (void)recoverSubviews; 52 | @end 53 | 54 | 55 | @class AVPlayer, AVPlayerLayer; 56 | @interface TZVideoPreviewCell : TZAssetPreviewCell 57 | @property (strong, nonatomic) AVPlayer *player; 58 | @property (strong, nonatomic) AVPlayerLayer *playerLayer; 59 | @property (strong, nonatomic) UIButton *playButton; 60 | @property (strong, nonatomic) UIImage *cover; 61 | - (void)pausePlayerAndShowNaviBar; 62 | @end 63 | 64 | 65 | @interface TZGifPreviewCell : TZAssetPreviewCell 66 | @property (strong, nonatomic) TZPhotoPreviewView *previewView; 67 | @end 68 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZPhotoPreviewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZPhotoPreviewController.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 15/12/24. 6 | // Copyright © 2015年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TZPhotoPreviewController : UIViewController 12 | 13 | @property (nonatomic, strong) NSMutableArray *models; ///< All photo models / 所有图片模型数组 14 | @property (nonatomic, strong) NSMutableArray *photos; ///< All photos / 所有图片数组 15 | @property (nonatomic, assign) NSInteger currentIndex; ///< Index of the photo user click / 用户点击的图片的索引 16 | @property (nonatomic, assign) BOOL isSelectOriginalPhoto; ///< If YES,return original photo / 是否返回原图 17 | @property (nonatomic, assign) BOOL isCropImage; 18 | 19 | /// Return the new selected photos / 返回最新的选中图片数组 20 | @property (nonatomic, copy) void (^backButtonClickBlock)(BOOL isSelectOriginalPhoto); 21 | @property (nonatomic, copy) void (^doneButtonClickBlock)(BOOL isSelectOriginalPhoto); 22 | @property (nonatomic, copy) void (^doneButtonClickBlockCropMode)(UIImage *cropedImage,id asset); 23 | @property (nonatomic, copy) void (^doneButtonClickBlockWithPreviewType)(NSArray *photos,NSArray *assets,BOOL isSelectOriginalPhoto); 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZProgressView.h 3 | // TZImagePickerController 4 | // 5 | // Created by ttouch on 2016/12/6. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TZProgressView : UIView 12 | 13 | @property (nonatomic, assign) double progress; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // TZProgressView.m 3 | // TZImagePickerController 4 | // 5 | // Created by ttouch on 2016/12/6. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import "TZProgressView.h" 10 | 11 | @interface TZProgressView () 12 | @property (nonatomic, strong) CAShapeLayer *progressLayer; 13 | @end 14 | 15 | @implementation TZProgressView 16 | 17 | - (instancetype)init { 18 | self = [super init]; 19 | if (self) { 20 | self.backgroundColor = [UIColor clearColor]; 21 | 22 | _progressLayer = [CAShapeLayer layer]; 23 | _progressLayer.fillColor = [[UIColor clearColor] CGColor]; 24 | _progressLayer.strokeColor = [[UIColor whiteColor] CGColor]; 25 | _progressLayer.opacity = 1; 26 | _progressLayer.lineCap = kCALineCapRound; 27 | _progressLayer.lineWidth = 5; 28 | 29 | [_progressLayer setShadowColor:[UIColor blackColor].CGColor]; 30 | [_progressLayer setShadowOffset:CGSizeMake(1, 1)]; 31 | [_progressLayer setShadowOpacity:0.5]; 32 | [_progressLayer setShadowRadius:2]; 33 | } 34 | return self; 35 | } 36 | 37 | - (void)drawRect:(CGRect)rect { 38 | CGPoint center = CGPointMake(rect.size.width / 2, rect.size.height / 2); 39 | CGFloat radius = rect.size.width / 2; 40 | CGFloat startA = - M_PI_2; 41 | CGFloat endA = - M_PI_2 + M_PI * 2 * _progress; 42 | _progressLayer.frame = self.bounds; 43 | UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; 44 | _progressLayer.path =[path CGPath]; 45 | 46 | [_progressLayer removeFromSuperlayer]; 47 | [self.layer addSublayer:_progressLayer]; 48 | } 49 | 50 | - (void)setProgress:(double)progress { 51 | _progress = progress; 52 | [self setNeedsDisplay]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/TZVideoPlayerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TZVideoPlayerController.h 3 | // TZImagePickerController 4 | // 5 | // Created by 谭真 on 16/1/5. 6 | // Copyright © 2016年 谭真. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class TZAssetModel; 12 | @interface TZVideoPlayerController : UIViewController 13 | 14 | @property (nonatomic, strong) TZAssetModel *model; 15 | 16 | @end -------------------------------------------------------------------------------- /pop/pop/Thirdpart/ImagePicker/TZImagePickerController/UIView+Layout.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Layout.h 3 | // 4 | // Created by 谭真 on 15/2/24. 5 | // Copyright © 2015年 谭真. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | typedef enum : NSUInteger { 11 | TZOscillatoryAnimationToBigger, 12 | TZOscillatoryAnimationToSmaller, 13 | } TZOscillatoryAnimationType; 14 | 15 | @interface UIView (Layout) 16 | 17 | @property (nonatomic) CGFloat tz_left; ///< Shortcut for frame.origin.x. 18 | @property (nonatomic) CGFloat tz_top; ///< Shortcut for frame.origin.y 19 | @property (nonatomic) CGFloat tz_right; ///< Shortcut for frame.origin.x + frame.size.width 20 | @property (nonatomic) CGFloat tz_bottom; ///< Shortcut for frame.origin.y + frame.size.height 21 | @property (nonatomic) CGFloat tz_width; ///< Shortcut for frame.size.width. 22 | @property (nonatomic) CGFloat tz_height; ///< Shortcut for frame.size.height. 23 | @property (nonatomic) CGFloat tz_centerX; ///< Shortcut for center.x 24 | @property (nonatomic) CGFloat tz_centerY; ///< Shortcut for center.y 25 | @property (nonatomic) CGPoint tz_origin; ///< Shortcut for frame.origin. 26 | @property (nonatomic) CGSize tz_size; ///< Shortcut for frame.size. 27 | 28 | + (void)showOscillatoryAnimationWithLayer:(CALayer *)layer type:(TZOscillatoryAnimationType)type; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASConstraint+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASConstraint+Private.h 3 | // Masonry 4 | // 5 | // Created by Nick Tymchenko on 29/04/14. 6 | // Copyright (c) 2014 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | 11 | @protocol MASConstraintDelegate; 12 | 13 | 14 | @interface MASConstraint () 15 | 16 | /** 17 | * Whether or not to check for an existing constraint instead of adding constraint 18 | */ 19 | @property (nonatomic, assign) BOOL updateExisting; 20 | 21 | /** 22 | * Usually MASConstraintMaker but could be a parent MASConstraint 23 | */ 24 | @property (nonatomic, weak) id delegate; 25 | 26 | /** 27 | * Based on a provided value type, is equal to calling: 28 | * NSNumber - setOffset: 29 | * NSValue with CGPoint - setPointOffset: 30 | * NSValue with CGSize - setSizeOffset: 31 | * NSValue with MASEdgeInsets - setInsets: 32 | */ 33 | - (void)setLayoutConstantWithValue:(NSValue *)value; 34 | 35 | @end 36 | 37 | 38 | @interface MASConstraint (Abstract) 39 | 40 | /** 41 | * Sets the constraint relation to given NSLayoutRelation 42 | * returns a block which accepts one of the following: 43 | * MASViewAttribute, UIView, NSValue, NSArray 44 | * see readme for more details. 45 | */ 46 | - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; 47 | 48 | /** 49 | * Override to set a custom chaining behaviour 50 | */ 51 | - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 52 | 53 | @end 54 | 55 | 56 | @protocol MASConstraintDelegate 57 | 58 | /** 59 | * Notifies the delegate when the constraint needs to be replaced with another constraint. For example 60 | * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks 61 | */ 62 | - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; 63 | 64 | - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASAttribute.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * An immutable tuple which stores the view and the related NSLayoutAttribute. 13 | * Describes part of either the left or right hand side of a constraint equation 14 | */ 15 | @interface MASViewAttribute : NSObject 16 | 17 | /** 18 | * The view which the reciever relates to. Can be nil if item is not a view. 19 | */ 20 | @property (nonatomic, weak, readonly) MAS_VIEW *view; 21 | 22 | /** 23 | * The item which the reciever relates to. 24 | */ 25 | @property (nonatomic, weak, readonly) id item; 26 | 27 | /** 28 | * The attribute which the reciever relates to 29 | */ 30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; 31 | 32 | /** 33 | * Convenience initializer. 34 | */ 35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; 36 | 37 | /** 38 | * The designated initializer. 39 | */ 40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; 41 | 42 | /** 43 | * Determine whether the layoutAttribute is a size attribute 44 | * 45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight 46 | */ 47 | - (BOOL)isSizeAttribute; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASAttribute.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | 11 | @implementation MASViewAttribute 12 | 13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { 14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; 15 | return self; 16 | } 17 | 18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { 19 | self = [super init]; 20 | if (!self) return nil; 21 | 22 | _view = view; 23 | _item = item; 24 | _layoutAttribute = layoutAttribute; 25 | 26 | return self; 27 | } 28 | 29 | - (BOOL)isSizeAttribute { 30 | return self.layoutAttribute == NSLayoutAttributeWidth 31 | || self.layoutAttribute == NSLayoutAttributeHeight; 32 | } 33 | 34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { 35 | if ([viewAttribute isKindOfClass:self.class]) { 36 | return self.view == viewAttribute.view 37 | && self.layoutAttribute == viewAttribute.layoutAttribute; 38 | } 39 | return [super isEqual:viewAttribute]; 40 | } 41 | 42 | - (NSUInteger)hash { 43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | #import "MASConstraint.h" 11 | #import "MASLayoutConstraint.h" 12 | #import "MASUtilities.h" 13 | 14 | /** 15 | * A single constraint. 16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view 17 | */ 18 | @interface MASViewConstraint : MASConstraint 19 | 20 | /** 21 | * First item/view and first attribute of the NSLayoutConstraint 22 | */ 23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; 24 | 25 | /** 26 | * Second item/view and second attribute of the NSLayoutConstraint 27 | */ 28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; 29 | 30 | /** 31 | * initialises the MASViewConstraint with the first part of the equation 32 | * 33 | * @param firstViewAttribute view.mas_left, view.mas_width etc. 34 | * 35 | * @return a new view constraint 36 | */ 37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; 38 | 39 | /** 40 | * Returns all MASViewConstraints installed with this view as a first item. 41 | * 42 | * @param view A view to retrieve constraints for. 43 | * 44 | * @return An array of MASViewConstraints. 45 | */ 46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /pop/pop/Thirdpart/Masonry/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /pop/pop/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : PPBasicController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /pop/pop/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | @try { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 16 | }@catch(NSException *exception){ 17 | NSLog(@"exception reason is %@",exception.reason); 18 | } 19 | 20 | 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pop/pop/pop_prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // pop 4 | // 5 | // Created by neil on 2017/9/11. 6 | // Copyright © 2017年 neil. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | // Include any system framework and library headers here that should be included in all compilation units. 13 | // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. 14 | 15 | #import "PPBasicController.h" 16 | #import "PPBasicNavigationController.h" 17 | #import "PPHelper.h" 18 | #import "UIView+FrameMethods.h" 19 | #import "Masonry.h" 20 | #import "MBProgressHUD.h" 21 | #import "AppDefinition.h" 22 | 23 | 24 | #endif /* PrefixHeader_pch */ 25 | -------------------------------------------------------------------------------- /screenshots/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/1.jpg -------------------------------------------------------------------------------- /screenshots/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/2.jpg -------------------------------------------------------------------------------- /screenshots/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/3.jpg -------------------------------------------------------------------------------- /screenshots/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/4.jpg -------------------------------------------------------------------------------- /screenshots/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/5.jpg -------------------------------------------------------------------------------- /screenshots/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heguowen/PPVideoEdit/14aeb3b671ad3ffed2129cff22e09e9e02b1406f/screenshots/6.jpg --------------------------------------------------------------------------------