├── .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 |
14 |
15 |
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
--------------------------------------------------------------------------------