├── Images
└── demo.gif
├── LiveDemo.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcuserdata
│ └── fenglongfei.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── LiveDemo.xcworkspace
├── contents.xcworkspacedata
├── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── xcuserdata
│ └── fenglongfei.xcuserdatad
│ └── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
├── LiveDemo
├── AppDelegate.h
├── AppDelegate.m
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── Gift
│ │ ├── 0times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new0@2x.png
│ │ │ └── new0@3x.png
│ │ ├── 1times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new1@2x.png
│ │ │ └── new1@3x.png
│ │ ├── 2times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new2@2x.png
│ │ │ └── new2@3x.png
│ │ ├── 3times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new3@2x.png
│ │ │ └── new3@3x.png
│ │ ├── 4times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new4@2x.png
│ │ │ └── new4@3x.png
│ │ ├── 5times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new5@2x.png
│ │ │ └── new5@3x.png
│ │ ├── 6times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new6@2x.png
│ │ │ └── new6@3x.png
│ │ ├── 7times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new7@2x.png
│ │ │ └── new7@3x.png
│ │ ├── 8times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new8@2x.png
│ │ │ └── new8@3x.png
│ │ ├── 9times.imageset
│ │ │ ├── Contents.json
│ │ │ ├── new9@2x.png
│ │ │ └── new9@3x.png
│ │ ├── Ani-0.imageset
│ │ │ ├── Ani-0@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-1.imageset
│ │ │ ├── Ani-1@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-2.imageset
│ │ │ ├── Ani-2@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-3.imageset
│ │ │ ├── Ani-3@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-4.imageset
│ │ │ ├── Ani-4@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-5.imageset
│ │ │ ├── Ani-5@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-6.imageset
│ │ │ ├── Ani-6@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-7.imageset
│ │ │ ├── Ani-7@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-8.imageset
│ │ │ ├── Ani-8@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-9.imageset
│ │ │ ├── Ani-9@3x.png
│ │ │ └── Contents.json
│ │ ├── Ani-x.imageset
│ │ │ ├── Ani-x@3x.png
│ │ │ └── Contents.json
│ │ ├── Congrats-bg10.imageset
│ │ │ ├── Congrats-bg10@2x.png
│ │ │ ├── Congrats-bg10@3x.png
│ │ │ └── Contents.json
│ │ ├── Congrats-bg50.imageset
│ │ │ ├── Congrats-bg50@2x.png
│ │ │ ├── Congrats-bg50@3x.png
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── congrats500-frontbg.imageset
│ │ │ ├── Contents.json
│ │ │ ├── congrats500-frontbg@2x.png
│ │ │ └── congrats500-frontbg@3x.png
│ │ ├── emissive-bg.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emissive-bg@2x.png
│ │ │ └── emissive-bg@3x.png
│ │ ├── icon-Gold.imageset
│ │ │ ├── Contents.json
│ │ │ ├── icon-Gold@2x.png
│ │ │ └── icon-Gold@3x.png
│ │ ├── room_bg_gift_area.imageset
│ │ │ ├── Contents.json
│ │ │ ├── room_bg_gift_area@2x.png
│ │ │ └── room_bg_gift_area@3x.png
│ │ ├── room_bg_gift_area_self.imageset
│ │ │ ├── Contents.json
│ │ │ ├── room_bg_gift_area_self@2x.png
│ │ │ └── room_bg_gift_area_self@3x.png
│ │ ├── second-star.imageset
│ │ │ ├── Contents.json
│ │ │ └── second-star@2x.png
│ │ ├── times-coins!.imageset
│ │ │ ├── Contents.json
│ │ │ └── times-coins!@3x.png
│ │ └── win.imageset
│ │ │ ├── Contents.json
│ │ │ └── win@3x.png
│ └── default_bg_user_avatar.imageset
│ │ ├── Contents.json
│ │ ├── default_bg_user_avatar@2x.png
│ │ └── default_bg_user_avatar@3x.png
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Header.h
├── Info.plist
├── Model
│ ├── Gift
│ │ ├── GiftShowModel.h
│ │ └── GiftShowModel.m
│ └── SwitchLive
│ │ ├── LiveInfo.h
│ │ └── LiveInfo.m
├── Until
│ ├── Category
│ │ ├── UIFont+Common.h
│ │ ├── UIFont+Common.m
│ │ ├── UILabel+Common.h
│ │ ├── UILabel+Common.m
│ │ ├── UIView+Frame.h
│ │ └── UIView+Frame.m
│ ├── Manager
│ │ ├── GiftShowManager.h
│ │ └── GiftShowManager.m
│ ├── Resouce
│ │ └── 礼物声音.mp3
│ └── gift.json
├── View
│ ├── Gfit
│ │ ├── GiftLuckyView.h
│ │ ├── GiftLuckyView.m
│ │ ├── GiftNumView.h
│ │ ├── GiftNumView.m
│ │ ├── GiftShowView.h
│ │ ├── GiftShowView.m
│ │ ├── ItemScrollNumView.h
│ │ └── ItemScrollNumView.m
│ ├── NumberLabel.h
│ ├── NumberLabel.m
│ └── switchLive
│ │ ├── SwitchLiveView.h
│ │ └── SwitchLiveView.m
├── controller
│ ├── CoinsNum
│ │ ├── CoinsNumController.h
│ │ └── CoinsNumController.m
│ ├── Gift
│ │ ├── GiftViewController.h
│ │ └── GiftViewController.m
│ ├── Home
│ │ ├── ViewController.h
│ │ └── ViewController.m
│ └── switchLive
│ │ ├── SwitchLiveViewController.h
│ │ └── SwitchLiveViewController.m
└── main.m
├── Podfile
├── Podfile.lock
├── Pods
├── FDFullscreenPopGesture
│ ├── FDFullscreenPopGesture
│ │ ├── UINavigationController+FDFullscreenPopGesture.h
│ │ └── UINavigationController+FDFullscreenPopGesture.m
│ ├── LICENSE
│ └── README.md
├── Headers
│ ├── Private
│ │ ├── FDFullscreenPopGesture
│ │ │ └── UINavigationController+FDFullscreenPopGesture.h
│ │ ├── Masonry
│ │ │ ├── MASCompositeConstraint.h
│ │ │ ├── MASConstraint+Private.h
│ │ │ ├── MASConstraint.h
│ │ │ ├── MASConstraintMaker.h
│ │ │ ├── MASLayoutConstraint.h
│ │ │ ├── MASUtilities.h
│ │ │ ├── MASViewAttribute.h
│ │ │ ├── MASViewConstraint.h
│ │ │ ├── Masonry.h
│ │ │ ├── NSArray+MASAdditions.h
│ │ │ ├── NSArray+MASShorthandAdditions.h
│ │ │ ├── NSLayoutConstraint+MASDebugAdditions.h
│ │ │ ├── View+MASAdditions.h
│ │ │ ├── View+MASShorthandAdditions.h
│ │ │ └── ViewController+MASAdditions.h
│ │ └── SDWebImage
│ │ │ ├── NSButton+WebCache.h
│ │ │ ├── NSData+ImageContentType.h
│ │ │ ├── NSImage+WebCache.h
│ │ │ ├── SDAnimatedImageRep.h
│ │ │ ├── SDImageCache.h
│ │ │ ├── SDImageCacheConfig.h
│ │ │ ├── SDWebImageCoder.h
│ │ │ ├── SDWebImageCoderHelper.h
│ │ │ ├── SDWebImageCodersManager.h
│ │ │ ├── SDWebImageCompat.h
│ │ │ ├── SDWebImageDownloader.h
│ │ │ ├── SDWebImageDownloaderOperation.h
│ │ │ ├── SDWebImageFrame.h
│ │ │ ├── SDWebImageGIFCoder.h
│ │ │ ├── SDWebImageImageIOCoder.h
│ │ │ ├── SDWebImageManager.h
│ │ │ ├── SDWebImageOperation.h
│ │ │ ├── SDWebImagePrefetcher.h
│ │ │ ├── SDWebImageTransition.h
│ │ │ ├── UIButton+WebCache.h
│ │ │ ├── UIImage+ForceDecode.h
│ │ │ ├── UIImage+GIF.h
│ │ │ ├── UIImage+MemoryCacheCost.h
│ │ │ ├── UIImage+MultiFormat.h
│ │ │ ├── UIImageView+HighlightedWebCache.h
│ │ │ ├── UIImageView+WebCache.h
│ │ │ ├── UIView+WebCache.h
│ │ │ └── UIView+WebCacheOperation.h
│ └── Public
│ │ ├── FDFullscreenPopGesture
│ │ └── UINavigationController+FDFullscreenPopGesture.h
│ │ ├── Masonry
│ │ ├── MASCompositeConstraint.h
│ │ ├── MASConstraint+Private.h
│ │ ├── MASConstraint.h
│ │ ├── MASConstraintMaker.h
│ │ ├── MASLayoutConstraint.h
│ │ ├── MASUtilities.h
│ │ ├── MASViewAttribute.h
│ │ ├── MASViewConstraint.h
│ │ ├── Masonry.h
│ │ ├── NSArray+MASAdditions.h
│ │ ├── NSArray+MASShorthandAdditions.h
│ │ ├── NSLayoutConstraint+MASDebugAdditions.h
│ │ ├── View+MASAdditions.h
│ │ ├── View+MASShorthandAdditions.h
│ │ └── ViewController+MASAdditions.h
│ │ └── SDWebImage
│ │ ├── NSButton+WebCache.h
│ │ ├── NSData+ImageContentType.h
│ │ ├── NSImage+WebCache.h
│ │ ├── SDAnimatedImageRep.h
│ │ ├── SDImageCache.h
│ │ ├── SDImageCacheConfig.h
│ │ ├── SDWebImageCoder.h
│ │ ├── SDWebImageCoderHelper.h
│ │ ├── SDWebImageCodersManager.h
│ │ ├── SDWebImageCompat.h
│ │ ├── SDWebImageDownloader.h
│ │ ├── SDWebImageDownloaderOperation.h
│ │ ├── SDWebImageFrame.h
│ │ ├── SDWebImageGIFCoder.h
│ │ ├── SDWebImageImageIOCoder.h
│ │ ├── SDWebImageManager.h
│ │ ├── SDWebImageOperation.h
│ │ ├── SDWebImagePrefetcher.h
│ │ ├── SDWebImageTransition.h
│ │ ├── UIButton+WebCache.h
│ │ ├── UIImage+ForceDecode.h
│ │ ├── UIImage+GIF.h
│ │ ├── UIImage+MemoryCacheCost.h
│ │ ├── UIImage+MultiFormat.h
│ │ ├── UIImageView+HighlightedWebCache.h
│ │ ├── UIImageView+WebCache.h
│ │ ├── UIView+WebCache.h
│ │ └── UIView+WebCacheOperation.h
├── Manifest.lock
├── Masonry
│ ├── LICENSE
│ ├── 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
│ └── README.md
├── Pods.xcodeproj
│ ├── project.pbxproj
│ └── xcuserdata
│ │ └── fenglongfei.xcuserdatad
│ │ └── xcschemes
│ │ ├── FDFullscreenPopGesture.xcscheme
│ │ ├── Masonry.xcscheme
│ │ ├── Pods-LiveDemo.xcscheme
│ │ ├── SDWebImage.xcscheme
│ │ └── xcschememanagement.plist
├── SDWebImage
│ ├── LICENSE
│ ├── README.md
│ └── SDWebImage
│ │ ├── NSButton+WebCache.h
│ │ ├── NSButton+WebCache.m
│ │ ├── NSData+ImageContentType.h
│ │ ├── NSData+ImageContentType.m
│ │ ├── NSImage+WebCache.h
│ │ ├── NSImage+WebCache.m
│ │ ├── SDAnimatedImageRep.h
│ │ ├── SDAnimatedImageRep.m
│ │ ├── SDImageCache.h
│ │ ├── SDImageCache.m
│ │ ├── SDImageCacheConfig.h
│ │ ├── SDImageCacheConfig.m
│ │ ├── SDWebImageCoder.h
│ │ ├── SDWebImageCoder.m
│ │ ├── SDWebImageCoderHelper.h
│ │ ├── SDWebImageCoderHelper.m
│ │ ├── SDWebImageCodersManager.h
│ │ ├── SDWebImageCodersManager.m
│ │ ├── SDWebImageCompat.h
│ │ ├── SDWebImageCompat.m
│ │ ├── SDWebImageDownloader.h
│ │ ├── SDWebImageDownloader.m
│ │ ├── SDWebImageDownloaderOperation.h
│ │ ├── SDWebImageDownloaderOperation.m
│ │ ├── SDWebImageFrame.h
│ │ ├── SDWebImageFrame.m
│ │ ├── SDWebImageGIFCoder.h
│ │ ├── SDWebImageGIFCoder.m
│ │ ├── SDWebImageImageIOCoder.h
│ │ ├── SDWebImageImageIOCoder.m
│ │ ├── SDWebImageManager.h
│ │ ├── SDWebImageManager.m
│ │ ├── SDWebImageOperation.h
│ │ ├── SDWebImagePrefetcher.h
│ │ ├── SDWebImagePrefetcher.m
│ │ ├── SDWebImageTransition.h
│ │ ├── SDWebImageTransition.m
│ │ ├── UIButton+WebCache.h
│ │ ├── UIButton+WebCache.m
│ │ ├── UIImage+ForceDecode.h
│ │ ├── UIImage+ForceDecode.m
│ │ ├── UIImage+GIF.h
│ │ ├── UIImage+GIF.m
│ │ ├── UIImage+MemoryCacheCost.h
│ │ ├── UIImage+MemoryCacheCost.m
│ │ ├── UIImage+MultiFormat.h
│ │ ├── UIImage+MultiFormat.m
│ │ ├── UIImageView+HighlightedWebCache.h
│ │ ├── UIImageView+HighlightedWebCache.m
│ │ ├── UIImageView+WebCache.h
│ │ ├── UIImageView+WebCache.m
│ │ ├── UIView+WebCache.h
│ │ ├── UIView+WebCache.m
│ │ ├── UIView+WebCacheOperation.h
│ │ └── UIView+WebCacheOperation.m
└── Target Support Files
│ ├── FDFullscreenPopGesture
│ ├── FDFullscreenPopGesture-dummy.m
│ ├── FDFullscreenPopGesture-prefix.pch
│ └── FDFullscreenPopGesture.xcconfig
│ ├── Masonry
│ ├── Masonry-dummy.m
│ ├── Masonry-prefix.pch
│ └── Masonry.xcconfig
│ ├── Pods-LiveDemo
│ ├── Pods-LiveDemo-acknowledgements.markdown
│ ├── Pods-LiveDemo-acknowledgements.plist
│ ├── Pods-LiveDemo-dummy.m
│ ├── Pods-LiveDemo.debug.xcconfig
│ └── Pods-LiveDemo.release.xcconfig
│ └── SDWebImage
│ ├── SDWebImage-dummy.m
│ ├── SDWebImage-prefix.pch
│ └── SDWebImage.xcconfig
└── README.md
/Images/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/Images/demo.gif
--------------------------------------------------------------------------------
/LiveDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/LiveDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/LiveDemo.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | LiveDemo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 4
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/LiveDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/LiveDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/LiveDemo.xcworkspace/xcuserdata/fenglongfei.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
16 |
17 |
18 |
20 |
33 |
34 |
35 |
37 |
50 |
51 |
52 |
54 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/LiveDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. 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 |
--------------------------------------------------------------------------------
/LiveDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 |
13 | @end
14 |
15 | @implementation AppDelegate
16 |
17 |
18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
19 | // Override point for customization after application launch.
20 | if (@available(ios 11.0,*)) {
21 | UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
22 | UITableView.appearance.estimatedRowHeight = 0;
23 | UITableView.appearance.estimatedSectionHeaderHeight = 0;
24 | UITableView.appearance.estimatedSectionFooterHeight = 0;
25 | }
26 | return YES;
27 | }
28 |
29 |
30 | - (void)applicationWillResignActive:(UIApplication *)application {
31 | // 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.
32 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
33 | }
34 |
35 |
36 | - (void)applicationDidEnterBackground:(UIApplication *)application {
37 | // 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.
38 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
39 | }
40 |
41 |
42 | - (void)applicationWillEnterForeground:(UIApplication *)application {
43 | // 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.
44 | }
45 |
46 |
47 | - (void)applicationDidBecomeActive:(UIApplication *)application {
48 | // 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.
49 | }
50 |
51 |
52 | - (void)applicationWillTerminate:(UIApplication *)application {
53 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
54 | }
55 |
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/0times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new0@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new0@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/0times.imageset/new0@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/0times.imageset/new0@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/0times.imageset/new0@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/0times.imageset/new0@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/1times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new1@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new1@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/1times.imageset/new1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/1times.imageset/new1@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/1times.imageset/new1@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/1times.imageset/new1@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/2times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new2@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new2@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/2times.imageset/new2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/2times.imageset/new2@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/2times.imageset/new2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/2times.imageset/new2@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/3times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new3@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new3@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/3times.imageset/new3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/3times.imageset/new3@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/3times.imageset/new3@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/3times.imageset/new3@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/4times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new4@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new4@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/4times.imageset/new4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/4times.imageset/new4@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/4times.imageset/new4@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/4times.imageset/new4@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/5times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new5@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new5@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/5times.imageset/new5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/5times.imageset/new5@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/5times.imageset/new5@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/5times.imageset/new5@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/6times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new6@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new6@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/6times.imageset/new6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/6times.imageset/new6@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/6times.imageset/new6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/6times.imageset/new6@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/7times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new7@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new7@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/7times.imageset/new7@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/7times.imageset/new7@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/7times.imageset/new7@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/7times.imageset/new7@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/8times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new8@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new8@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/8times.imageset/new8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/8times.imageset/new8@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/8times.imageset/new8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/8times.imageset/new8@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/9times.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "new9@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "new9@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/9times.imageset/new9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/9times.imageset/new9@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/9times.imageset/new9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/9times.imageset/new9@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-0.imageset/Ani-0@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-0.imageset/Ani-0@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-0.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-0@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-1.imageset/Ani-1@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-1.imageset/Ani-1@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-1@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-2.imageset/Ani-2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-2.imageset/Ani-2@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-2@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-3.imageset/Ani-3@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-3.imageset/Ani-3@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-3@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-4.imageset/Ani-4@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-4.imageset/Ani-4@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-4@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-5.imageset/Ani-5@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-5.imageset/Ani-5@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-5@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-6.imageset/Ani-6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-6.imageset/Ani-6@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-6@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-7.imageset/Ani-7@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-7.imageset/Ani-7@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-7@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-8.imageset/Ani-8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-8.imageset/Ani-8@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-8@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-9.imageset/Ani-9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-9.imageset/Ani-9@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-9@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-x.imageset/Ani-x@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Ani-x.imageset/Ani-x@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Ani-x.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "Ani-x@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg10.imageset/Congrats-bg10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Congrats-bg10.imageset/Congrats-bg10@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg10.imageset/Congrats-bg10@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Congrats-bg10.imageset/Congrats-bg10@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Congrats-bg10@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Congrats-bg10@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg50.imageset/Congrats-bg50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Congrats-bg50.imageset/Congrats-bg50@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg50.imageset/Congrats-bg50@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/Congrats-bg50.imageset/Congrats-bg50@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Congrats-bg50.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Congrats-bg50@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Congrats-bg50@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/congrats500-frontbg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "congrats500-frontbg@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "congrats500-frontbg@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/congrats500-frontbg.imageset/congrats500-frontbg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/congrats500-frontbg.imageset/congrats500-frontbg@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/congrats500-frontbg.imageset/congrats500-frontbg@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/congrats500-frontbg.imageset/congrats500-frontbg@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/emissive-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "emissive-bg@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "emissive-bg@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/emissive-bg.imageset/emissive-bg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/emissive-bg.imageset/emissive-bg@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/emissive-bg.imageset/emissive-bg@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/emissive-bg.imageset/emissive-bg@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/icon-Gold.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icon-Gold@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "icon-Gold@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/icon-Gold.imageset/icon-Gold@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/icon-Gold.imageset/icon-Gold@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/icon-Gold.imageset/icon-Gold@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/icon-Gold.imageset/icon-Gold@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "room_bg_gift_area@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "room_bg_gift_area@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area.imageset/room_bg_gift_area@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area.imageset/room_bg_gift_area@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area.imageset/room_bg_gift_area@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area.imageset/room_bg_gift_area@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area_self.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "room_bg_gift_area_self@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "room_bg_gift_area_self@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area_self.imageset/room_bg_gift_area_self@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area_self.imageset/room_bg_gift_area_self@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area_self.imageset/room_bg_gift_area_self@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/room_bg_gift_area_self.imageset/room_bg_gift_area_self@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/second-star.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "second-star@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/second-star.imageset/second-star@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/second-star.imageset/second-star@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/times-coins!.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "times-coins!@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/times-coins!.imageset/times-coins!@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/times-coins!.imageset/times-coins!@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/win.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "win@3x.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/Gift/win.imageset/win@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/Gift/win.imageset/win@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/default_bg_user_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "default_bg_user_avatar@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "default_bg_user_avatar@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/default_bg_user_avatar.imageset/default_bg_user_avatar@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/default_bg_user_avatar.imageset/default_bg_user_avatar@2x.png
--------------------------------------------------------------------------------
/LiveDemo/Assets.xcassets/default_bg_user_avatar.imageset/default_bg_user_avatar@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Assets.xcassets/default_bg_user_avatar.imageset/default_bg_user_avatar@3x.png
--------------------------------------------------------------------------------
/LiveDemo/Base.lproj/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 |
--------------------------------------------------------------------------------
/LiveDemo/Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Header.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #ifndef Header_h
10 | #define Header_h
11 | //第三方库
12 | #import //必须
13 | #import //非必须
14 | #import //必须
15 | //自定义头文件
16 | #import "GiftShowManager.h"
17 | #import "UILabel+Common.h"
18 | #import "UIView+Frame.h"
19 | #import "UIFont+Common.h"
20 |
21 | //工具
22 | #define kScale = [[UIScreen mainScreen] scale]
23 | #define kScreen_Width [UIScreen mainScreen].bounds.size.width
24 | #define kScreen_Height [UIScreen mainScreen].bounds.size.height
25 | #define kView_Width self.frame.size.width
26 | #define kView_Hight self.frame.size.height
27 | #define kKeyWindow [UIApplication sharedApplication].keyWindow
28 | #define kDefault_User_Image [UIImage imageNamed:@"default_bg_user_avatar"]
29 | #define RGB(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]
30 | #define RGBA(rgbValue,a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:(a)]
31 | #define kNOTIFITION_GIFT_LUCKYMESSAGE @"kNOTIFITION_GIFT_LUCKYMESSAGE"//自己中奖通知message
32 | #define kNOTIFICATION_GREATER_500Times_Lucky @"kNOTIFICATION_GREATER_500Times_Lucky"//自己中得大奖通知(>=500倍)
33 | //需要在项目中替换的
34 | #define MyUid 1000000//自己的uid
35 | #define kGiftNumPadding 15.0//礼物数字之间的间距
36 | #endif /* Header_h */
37 |
--------------------------------------------------------------------------------
/LiveDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/LiveDemo/Model/Gift/GiftShowModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // NewLiveGiftModel.h
3 | // shehui
4 | //
5 | // Created by 徐奥林 on 2017/4/21.
6 | // Copyright © 2017年 happyfirst. All rights reserved.
7 | //
8 |
9 | #import
10 | @class LuckyManager;
11 | @interface GiftShowModel : NSObject
12 | //最后礼物数量
13 | @property (nonatomic, assign) NSInteger lastGiftNum;
14 | //新加礼物数量
15 | @property (nonatomic, assign) NSInteger newGiftNum;
16 | //礼物id
17 | @property (nonatomic, assign) NSInteger giftId;
18 | //礼物图片
19 | @property (nonatomic, strong) NSString *giftImageUrl;
20 | //用户昵称
21 | @property (nonatomic, strong) NSString *SenderName;
22 | //发送者id
23 | @property (nonatomic, assign) NSInteger SenderUid;
24 | //发送的礼物名称
25 | @property (nonatomic, strong) NSString *GiftName;
26 | //幸运礼物数组
27 | @property (nonatomic, strong) NSMutableArray *luckGiftInfos;
28 | //发送者头像
29 | @property (nonatomic, strong) NSString *avatarUrl;
30 | //接收人昵称
31 | @property (nonatomic, strong) NSString *toName;
32 | //接收人ID
33 | @property (nonatomic, assign) NSInteger toUid;
34 | //礼物金额
35 | @property (nonatomic, assign) NSInteger gold;
36 | //webp
37 | @property (nonatomic, assign) BOOL isWebp;
38 | @property (nonatomic, strong) NSString *webpImageUrl;
39 |
40 | //是否即将移除(被标记说明该model 正要执行滑动移除动画不能再进行 合并)
41 | @property (nonatomic,assign) BOOL isWillRemove;
42 | - (NSInteger)getLuckyLum;
43 | @end
44 |
45 | @interface GiftLucky : NSObject
46 | @property (nonatomic,strong) NSString *medals;
47 | @property (nonatomic,strong) NSString *mutil;
48 | @property (nonatomic,strong) NSString *remainCoins;
49 | @property (nonatomic,strong) NSString *showMsg;
50 | @end
51 |
--------------------------------------------------------------------------------
/LiveDemo/Model/Gift/GiftShowModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // NewLiveGiftModel.m
3 | // shehui
4 | //
5 | // Created by 徐奥林 on 2017/4/21.
6 | // Copyright © 2017年 happyfirst. All rights reserved.
7 | //
8 |
9 | #import "GiftShowModel.h"
10 | @implementation GiftShowModel
11 | - (id)copyWithZone:(NSZone *)zone{
12 | GiftShowModel *model = [[[self class] allocWithZone:zone]init];
13 | model.lastGiftNum = _lastGiftNum;
14 | model.newGiftNum = _newGiftNum;
15 | model.giftId = _giftId;
16 | model.giftImageUrl = [_giftImageUrl copy];
17 | model.SenderName = [_SenderName copy];
18 | model.SenderUid = _SenderUid;
19 | model.GiftName = [_GiftName copy];
20 | model.luckGiftInfos = [_luckGiftInfos copy];
21 | model.avatarUrl = [_avatarUrl copy];
22 | model.toName = [_toName copy];
23 | model.toUid = _toUid;
24 | model.gold = _gold;
25 | model.isWebp = _isWebp;
26 | model.webpImageUrl = [_webpImageUrl copy];
27 | return model;
28 | }
29 | - (instancetype)init {
30 | self = [super init];
31 | if (self) {
32 |
33 | }
34 | return self;
35 | }
36 | - (NSInteger)getLuckyLum {
37 | NSInteger allNum = 0;
38 | for (GiftLucky *luckGiftInfo in self.luckGiftInfos) {
39 | allNum = allNum + [luckGiftInfo.mutil integerValue];
40 | }
41 | return allNum;
42 | }
43 |
44 | @end
45 | @implementation GiftLucky
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/LiveDemo/Model/SwitchLive/LiveInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // LiveInfo.h
3 | // Remark_QYLive
4 | //
5 | // Created by 冯龙飞 on 2018/11/9.
6 | // Copyright © 2018年 孟博. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface LiveInfo :NSObject
14 | @property (nonatomic , copy) NSString * cover;
15 |
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/LiveDemo/Model/SwitchLive/LiveInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // LiveInfo.m
3 | // Remark_QYLive
4 | //
5 | // Created by 冯龙飞 on 2018/11/9.
6 | // Copyright © 2018年 孟博. All rights reserved.
7 | //
8 |
9 | #import "LiveInfo.h"
10 |
11 | @implementation LiveInfo
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UIFont+Common.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIFont+Common.h
3 | // shehui
4 | //
5 | // Created by EagleLive on 2017/7/17.
6 | // Copyright © 2017年 happyfirst. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIFont (Common)
12 | /*
13 | 字体: PingFangSC-Bold
14 | **/
15 | + (UIFont *)fontWith_Bold_OfSize:(CGFloat)size;
16 | /*
17 | 字体: PingFangSC-Regular
18 | **/
19 | + (UIFont *)fontWith_Regular_OfSize:(CGFloat)size;
20 | + (UIFont *)fontWith_Light_OfSize:(CGFloat)size;
21 | /*
22 | 字体: PingFangSC-Medium
23 | **/
24 | + (UIFont *)fontWith_Medium_OfSize:(CGFloat)size;
25 | + (UIFont *)fontWith_Semibold_OfSize:(CGFloat)size;
26 | + (UIFont *)fontWith_AmericanCondensedBold_OfSize:(CGFloat)size;
27 |
28 | /*
29 | 字体: DINAlternate-Bold
30 | 字体: DINCond-Bold
31 | **/
32 | + (UIFont *)fontWith_DINAlternate_OfSize:(CGFloat)size;
33 | + (UIFont *)fontWith_DINCond_OfSize:(CGFloat)size;
34 |
35 |
36 | + (void)logFont;
37 | @end
38 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UIFont+Common.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIFont+Common.m
3 | // shehui
4 | //
5 | // Created by EagleLive on 2017/7/17.
6 | // Copyright © 2017年 happyfirst. All rights reserved.
7 | //
8 |
9 | #import "UIFont+Common.h"
10 | /*
11 | 'SFUIText-Bold'
12 | 'SFUIText-Regular'
13 | 'SFUIText-Semibold'
14 | 'SFUIText-Medium'
15 | 'Condensed'
16 | */
17 | @implementation UIFont (Common)
18 | + (UIFont *)fontWith_AmericanCondensedBold_OfSize:(CGFloat)size {
19 | UIFont *font = [UIFont fontWithName:@"AmericanTypewriter-CondensedBold" size:size];
20 | if (font == nil){
21 | font = [UIFont boldSystemFontOfSize:size];
22 | }
23 | return font;
24 | }
25 | + (UIFont *)fontWith_Bold_OfSize:(CGFloat)size {
26 | UIFont *font = [UIFont fontWithName:@"PingFangSC-Bold" size:size];
27 | if (font == nil){
28 | font = [UIFont boldSystemFontOfSize:size];
29 | }
30 | return font;
31 | }
32 | + (UIFont *)fontWith_Regular_OfSize:(CGFloat)size {
33 | UIFont *font = [UIFont fontWithName:@"PingFangSC-Regular" size:size];
34 | if (font == nil) {
35 | font = [UIFont boldSystemFontOfSize:size];
36 | }
37 | return font;
38 | }
39 | + (UIFont *)fontWith_Medium_OfSize:(CGFloat)size {
40 | UIFont *font = [UIFont fontWithName:@"PingFangSC-Medium" size:size];
41 | if (font == nil) {
42 | font = [UIFont boldSystemFontOfSize:size];
43 | }
44 | return font;
45 | }
46 | + (UIFont *)fontWith_Light_OfSize:(CGFloat)size {
47 | UIFont *font = [UIFont fontWithName:@"PingFangSC-Light" size:size];
48 | if (font == nil) {
49 | font = [UIFont boldSystemFontOfSize:size];
50 | }
51 | return font;
52 | }
53 | + (UIFont *)fontWith_Semibold_OfSize:(CGFloat)size {
54 | UIFont *font = [UIFont fontWithName:@"PingFangSC-Semibold" size:size];
55 | if (font == nil) {
56 | font = [UIFont boldSystemFontOfSize:size];
57 | }
58 | return font;
59 | }
60 | + (UIFont *)fontWith_DINAlternate_OfSize:(CGFloat)size{
61 | UIFont *font = [UIFont fontWithName:@"DINAlternate-Bold" size:size];
62 | if (font == nil) {
63 | font = [UIFont boldSystemFontOfSize:size];
64 | }
65 | return font;
66 | }
67 | + (UIFont *)fontWith_DINCond_OfSize:(CGFloat)size{
68 | UIFont *font = [UIFont fontWithName:@"DINCond-Bold" size:size];
69 | if (font == nil) {
70 | font = [UIFont boldSystemFontOfSize:size];
71 | }
72 | return font;
73 | }
74 | + (void)logFont {
75 | int i = 0;
76 | for(NSString *fontfamilyname in [UIFont familyNames])
77 | {
78 | NSLog(@"family:'%@'",fontfamilyname);
79 | for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
80 | {
81 | NSLog(@"\tfont:'%@'",fontName);
82 | }
83 | NSLog(@"-------------%d",i++);
84 | }
85 | }
86 | @end
87 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UILabel+Common.h:
--------------------------------------------------------------------------------
1 | //
2 | // UILabel+Common.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface UILabel (Common)
14 | - (void)setLuckyTimes:(NSString *)num;
15 | - (void)setGiftNum:(NSString *)num;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UILabel+Common.m:
--------------------------------------------------------------------------------
1 | //
2 | // UILabel+Common.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "UILabel+Common.h"
10 |
11 | @implementation UILabel (Common)
12 | - (void)setGiftNum:(NSString *)num {
13 | if (!(num.length > 0)) {
14 | NSAssert(num.length > 0, @"礼物数量不大于0表示 服务器 或者自己 处理礼物数量有问题");
15 | return;
16 | }
17 | NSMutableAttributedString *strAtt = [[NSMutableAttributedString alloc] initWithString:@"" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:25]}];
18 | for (int i = 0; i < num.length; i++) {
19 | UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"Ani-%@",[num substringWithRange:NSMakeRange(i, 1)]]];
20 | NSTextAttachment *attatch = [[NSTextAttachment alloc] initWithData:nil ofType:nil];
21 | attatch.bounds = CGRectMake(i * - kGiftNumPadding, 0, image.size.width, image.size.height);
22 | attatch.image = image;
23 | NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attatch];
24 | [strAtt appendAttributedString:string];
25 | }
26 | self.attributedText = strAtt;
27 | }
28 | - (void)setLuckyTimes:(NSString *)num{
29 | if (!(num.length > 0)) {
30 | NSAssert(num.length > 0, @"礼物数量不大于0表示 服务器 或者自己 处理礼物数量有问题");
31 | return;
32 | }
33 | NSMutableAttributedString *strAtt = [[NSMutableAttributedString alloc] initWithString:@""];
34 | for (int i = 0; i < num.length; i++) {
35 | UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@times",[num substringWithRange:NSMakeRange(i, 1)]]];
36 | NSTextAttachment *attatch = [[NSTextAttachment alloc] initWithData:nil ofType:nil];
37 | attatch.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
38 | attatch.image = image;
39 | NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attatch];
40 | [strAtt appendAttributedString:string];
41 | }
42 | self.attributedText = strAtt;
43 | }
44 | @end
45 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UIView+Frame.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Frame.h
3 | // Coding_iOS
4 | //
5 | // Created by pan Shiyu on 15/7/16.
6 | // Copyright (c) 2015年 Coding. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import
12 |
13 | @interface UIView (Frame)
14 | @property (nonatomic, assign) CGFloat x;
15 | @property (nonatomic, assign) CGFloat y;
16 | @property (nonatomic, assign) CGFloat centerX;
17 | @property (nonatomic, assign) CGFloat centerY;
18 | @property (nonatomic, assign) CGFloat width;
19 | @property (nonatomic, assign) CGFloat height;
20 | @property (nonatomic, assign) CGSize size;
21 |
22 | @property (nonatomic, assign) CGFloat top;
23 | @property (nonatomic, assign) CGFloat bottom;
24 | @property (nonatomic, assign) CGFloat left;
25 | @property (nonatomic, assign) CGFloat right;
26 |
27 | @end
--------------------------------------------------------------------------------
/LiveDemo/Until/Category/UIView+Frame.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Frame.m
3 | // Coding_iOS
4 | //
5 | // Created by pan Shiyu on 15/7/16.
6 | // Copyright (c) 2015年 Coding. All rights reserved.
7 | //
8 |
9 | #import "UIView+Frame.h"
10 |
11 | @implementation UIView (Frame)
12 |
13 | - (void)setX:(CGFloat)x
14 | {
15 | CGRect frame = self.frame;
16 | frame.origin.x = x;
17 | self.frame = frame;
18 | }
19 |
20 | - (CGFloat)x
21 | {
22 | return self.frame.origin.x;
23 | }
24 |
25 | - (void)setY:(CGFloat)y
26 | {
27 | CGRect frame = self.frame;
28 | frame.origin.y = y;
29 | self.frame = frame;
30 | }
31 |
32 | - (CGFloat)y
33 | {
34 | return self.frame.origin.y;
35 | }
36 |
37 | - (void)setCenterX:(CGFloat)centerX
38 | {
39 | CGPoint center = self.center;
40 | center.x = centerX;
41 | self.center = center;
42 | }
43 |
44 | - (CGFloat)centerX
45 | {
46 | return self.center.x;
47 | }
48 |
49 | - (void)setCenterY:(CGFloat)centerY
50 | {
51 | CGPoint center = self.center;
52 | center.y = centerY;
53 | self.center = center;
54 | }
55 |
56 | - (CGFloat)centerY
57 | {
58 | return self.center.y;
59 | }
60 |
61 | - (void)setWidth:(CGFloat)width
62 | {
63 | CGRect frame = self.frame;
64 | frame.size.width = width;
65 | self.frame = frame;
66 | }
67 |
68 | - (CGFloat)width
69 | {
70 | return self.frame.size.width;
71 | }
72 |
73 | - (void)setHeight:(CGFloat)height
74 | {
75 | CGRect frame = self.frame;
76 | frame.size.height = height;
77 | self.frame = frame;
78 | }
79 |
80 | - (CGFloat)height
81 | {
82 | return self.frame.size.height;
83 | }
84 |
85 | - (void)setSize:(CGSize)size
86 | {
87 | CGRect frame = self.frame;
88 | frame.size = size;
89 | self.frame = frame;
90 | }
91 |
92 | - (CGSize)size
93 | {
94 | return self.frame.size;
95 | }
96 |
97 | - (void)setTop:(CGFloat)t
98 | {
99 | self.frame = CGRectMake(self.left, t, self.width, self.height);
100 | }
101 |
102 | - (CGFloat)top
103 | {
104 | return self.frame.origin.y;
105 | }
106 |
107 | - (void)setBottom:(CGFloat)b
108 | {
109 | self.frame = CGRectMake(self.left, b - self.height, self.width, self.height);
110 | }
111 |
112 | - (CGFloat)bottom
113 | {
114 | return self.frame.origin.y + self.frame.size.height;
115 | }
116 |
117 | - (void)setLeft:(CGFloat)l
118 | {
119 | self.frame = CGRectMake(l, self.top, self.width, self.height);
120 | }
121 |
122 | - (CGFloat)left
123 | {
124 | return self.frame.origin.x;
125 | }
126 |
127 | - (void)setRight:(CGFloat)r
128 | {
129 | self.frame = CGRectMake(r - self.width, self.top, self.width, self.height);
130 | }
131 |
132 | - (CGFloat)right
133 | {
134 | return self.frame.origin.x + self.frame.size.width;
135 | }
136 |
137 | @end
138 |
139 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Manager/GiftShowManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // GiftShowManager.h
3 | // shehui
4 | //
5 | // Created by EagleLive on 2017/6/26.
6 | // Copyright © 2017年 happyfirst. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "GiftShowModel.h"
11 | @interface GiftShowManager : NSObject
12 |
13 |
14 | //通知外部更新(可以合并)
15 | @property (nonatomic, copy) void(^updateBlock)(GiftShowModel *model);
16 | //通知外部添加展示
17 | @property (nonatomic, copy) void(^addBlock)(GiftShowModel *model);
18 | //收到动画礼物(和小礼物独立)
19 | @property (nonatomic, copy) void(^webpGiftBlock)(GiftShowModel *model);
20 | ///正在展示的giftModel数组
21 | @property (nonatomic, strong) NSMutableArray *showingArray;
22 |
23 | /**
24 | 接收到新礼物
25 |
26 | @param giftModel 收到的礼物model
27 | */
28 | - (void)didReceiveNewGiftWithModel:(GiftShowModel *)giftModel;
29 |
30 | /**
31 | 即将移除,判断是否移除。view只需处理移除与否,展示逻辑函数内部完成
32 |
33 | @param willRemoveModel 移除的model
34 | */
35 | - (void)updateShowingArray:(GiftShowModel *)willRemoveModel;
36 | //添加失败,重新添加
37 | - (void)addFault:(GiftShowModel *)model;
38 | /**
39 | 滑屏清空数据
40 | */
41 | - (void)clearData;
42 |
43 | + (NSInteger)countWay;
44 | @end
45 |
--------------------------------------------------------------------------------
/LiveDemo/Until/Resouce/礼物声音.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/U7426/LiveDemo/512e0ae700297da85f67387dfdaf0dfe682ad4e8/LiveDemo/Until/Resouce/礼物声音.mp3
--------------------------------------------------------------------------------
/LiveDemo/View/Gfit/GiftLuckyView.h:
--------------------------------------------------------------------------------
1 | //
2 | // LuckView.h
3 | // LiveUp
4 | //
5 | // Created by EagleLive on 2017/10/26.
6 | // Copyright © 2017年 pajia. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "GiftShowModel.h"
11 | @interface GiftLuckyView : UIView
12 | - (void)receiveModel:(GiftShowModel *)model;
13 | - (void)clearCumulation;
14 | @end
15 |
--------------------------------------------------------------------------------
/LiveDemo/View/Gfit/GiftNumView.h:
--------------------------------------------------------------------------------
1 | //
2 | // GiftNumView.h
3 | // LiveUp
4 | //
5 | // Created by EagleLive on 2017/10/19.
6 | // Copyright © 2017年 pajia. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface GiftNumView : UIView
12 | - (void)setGiftNum:(NSString *)num;
13 | - (void)setupOldNum:(NSInteger)oldNum newNum:(NSInteger)newNum completed:(void(^)(void))completed;
14 | @end
15 | @interface ScrollNumView : UIView
16 |
17 | /**
18 | 设置 滚动初始值 和 目标值,来创建需要滚动的view 并设置frame;
19 |
20 | @param fromNum 初始值
21 | @param toNum 目标值
22 | */
23 | - (void)setUpFromNum:(NSInteger)fromNum toNum:(NSInteger)toNum animationCompletion:(void (^)(void))completion;
24 | @end
25 |
--------------------------------------------------------------------------------
/LiveDemo/View/Gfit/GiftShowView.h:
--------------------------------------------------------------------------------
1 | //
2 | // GiftShowView.h
3 | // LiveUp
4 | //
5 | // Created by 杨晓东 on 2017/8/16.
6 | // Copyright © 2017年 pajia. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "GiftShowModel.h"
11 | @interface GiftShowView : UIView
12 | ///点击送礼物头像通知
13 | @property (nonatomic, copy) void (^didTouchAvatar)(NSString *name,NSInteger uid);
14 | ///即将展示礼物视图,通知外部,管理类判断是否需要合并处理,如果可以就合并 并更新giftModel
15 | @property (nonatomic, copy) void (^willShowGiftView)(GiftShowModel *giftModel);
16 | ///视图移除,通知下一个进入(传出需要移除的model)
17 | @property (nonatomic,copy) void (^willRemoveGiftView)(GiftShowModel *giftModel);
18 | ///展示幸运礼物,通知外部撒金币
19 | @property (nonatomic, copy) void (^didShowLuckyView)(void);
20 | @property (nonatomic,strong) GiftShowModel* giftModel;
21 | //视图是否正在展示(外部用此来判断此视图是否空闲)
22 | @property (nonatomic,assign) BOOL isShowing;
23 |
24 | - (void)setupShowWithGiftModel:(GiftShowModel *)giftModel;
25 | - (void)updateShowView;
26 | - (void)setupOrgin;
27 | - (void)setupLift:(BOOL)yesOrNo;//设置是否抬升
28 | @end
29 |
--------------------------------------------------------------------------------
/LiveDemo/View/Gfit/ItemScrollNumView.h:
--------------------------------------------------------------------------------
1 | //
2 | // ItemScrollNumView.h
3 | // Remark_QYLive
4 | //
5 | // Created by 冯龙飞 on 2019/4/15.
6 | // Copyright © 2019 孟博. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface ItemScrollNumView : UIView
14 | - (instancetype)initWithFrame:(CGRect)frame image:(NSString *)imagePrefix;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/LiveDemo/View/Gfit/ItemScrollNumView.m:
--------------------------------------------------------------------------------
1 | //
2 | // ItemScrollNumView.m
3 | // Remark_QYLive
4 | //
5 | // Created by 冯龙飞 on 2019/4/15.
6 | // Copyright © 2019 孟博. All rights reserved.
7 | //
8 |
9 | #import "ItemScrollNumView.h"
10 | @interface ItemScrollNumView()
11 | @property (nonatomic,strong) NSString *imagePrefix;
12 | @end
13 | @implementation ItemScrollNumView
14 |
15 | - (instancetype)initWithFrame:(CGRect)frame image:(NSString *)imagePrefix{
16 | self = [super initWithFrame:frame];
17 | if (self) {
18 | self.imagePrefix = imagePrefix;
19 | [self addNumView];
20 | }
21 | return self;
22 | }
23 | - (void)addNumView {
24 | CGFloat width = self.width;
25 | CGFloat height = self.height;
26 | for (int i = 0; i < 19; i++) {
27 | UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, (i * height), width, height)];
28 | int num = i;
29 | if (num > 9) {
30 | num -= 10;
31 | }
32 | imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%d.png",self.imagePrefix,num]];
33 | [self addSubview:imageView];
34 | }
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/LiveDemo/View/NumberLabel.h:
--------------------------------------------------------------------------------
1 | //
2 | // NumberLabel.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/5/8.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface NumberLabel : UILabel
14 | - (instancetype)initWithFrame:(CGRect)frame seconds:(CGFloat)seconds coins:(NSInteger)coins;
15 | - (void)start;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/LiveDemo/View/NumberLabel.m:
--------------------------------------------------------------------------------
1 | //
2 | // NumberLabel.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/5/8.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "NumberLabel.h"
10 | @interface NumberLabel()
11 | @property (nonatomic,assign) CGFloat seconds;
12 | @property (nonatomic,assign) NSInteger coins;
13 | @property (nonatomic,strong) NSTimer *timer;
14 | @end
15 |
16 | @implementation NumberLabel
17 | - (instancetype)initWithFrame:(CGRect)frame seconds:(CGFloat)seconds coins:(NSInteger)coins{
18 | self = [super initWithFrame:frame];
19 | if (self) {
20 | self.seconds = seconds;
21 | self.coins = coins;
22 | }
23 | return self;
24 | }
25 | - (void)start{
26 | __block NSInteger currentCount = self.coins;
27 | NSTimeInterval timeinterval = 0.1;
28 | if (self.timer) {
29 | [self.timer invalidate];
30 | self.timer = nil;
31 | }
32 | self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:YES block:^(NSTimer * _Nonnull timer) {
33 | currentCount -= (self.coins / (self.seconds / timeinterval));
34 | if (currentCount <= 0) {
35 | [timer invalidate];
36 | timer = nil;
37 | currentCount = 0;
38 | }
39 | NSString *text = [NSString stringWithFormat:@"%09ld",currentCount];
40 | NSString *formarttext = [self changeNumberFormatter:text];
41 | self.text = [NSString stringWithFormat:@"%@",formarttext];
42 | [self setLabelSpace:self withValue:self.text withFont:[UIFont fontWithName:@"DINAlternate-Bold" size:25]];
43 | }];
44 | [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
45 | }
46 | -(NSString*)changeNumberFormatter:(NSString*)str{
47 | NSString *numString = [NSString stringWithFormat:@"%@",str];
48 | NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
49 | [formatter setPositiveFormat:@"###,###,###"];
50 | NSNumber *number = [formatter numberFromString:numString];
51 | formatter.numberStyle=kCFNumberFormatterNoStyle;
52 | formatter.minimumIntegerDigits = 9;
53 | formatter.paddingCharacter = @"0";
54 | NSString *string = [formatter stringFromNumber:number];
55 | return string;
56 | }
57 | -(void)setLabelSpace:(UILabel*)label withValue:(NSString*)str withFont:(UIFont*)font {
58 | NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
59 | paraStyle.lineBreakMode = NSLineBreakByCharWrapping;
60 | paraStyle.alignment = NSTextAlignmentCenter;
61 | paraStyle.hyphenationFactor = 1.0;
62 | paraStyle.firstLineHeadIndent = 0.0;
63 | paraStyle.paragraphSpacingBefore = 0.0;
64 | paraStyle.headIndent = 0;
65 | paraStyle.tailIndent = 0;
66 | //设置字间距
67 | NSDictionary *dic = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paraStyle, NSKernAttributeName:@4.0f
68 | };
69 | NSAttributedString *attributeStr = [[NSAttributedString alloc] initWithString:str attributes:dic];
70 | label.attributedText = attributeStr;
71 | }
72 | - (void)drawTextInRect:(CGRect)rect{
73 | CGContextRef c = UIGraphicsGetCurrentContext();
74 | // 设置描边宽度
75 | CGContextSetLineWidth(c, 1);
76 | CGContextSetLineJoin(c, kCGLineJoinRound);
77 | CGContextSetTextDrawingMode(c, kCGTextStroke);
78 | // 描边颜色
79 | self.textColor = RGB(0xEC5614);
80 | [super drawTextInRect:rect];
81 | // 文本颜色
82 | self.textColor = RGB(0xFAEFD7);
83 | CGContextSetTextDrawingMode(c, kCGTextFill);
84 | [super drawTextInRect:rect];
85 | }
86 |
87 | @end
88 |
--------------------------------------------------------------------------------
/LiveDemo/View/switchLive/SwitchLiveView.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwitchLiveView.h
3 | // Remark_QYLive
4 | //
5 | // Created by 冯龙飞 on 2018/11/9.
6 | // Copyright © 2018年 孟博. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "LiveInfo.h"
11 | @interface SwitchLiveView : UIScrollView
12 |
13 | /**
14 | 初始化
15 |
16 | @param views 贴在此视图上的子视图数组(addsubview 顺序跟 元素顺序相同)
17 | @param lives 直播列表
18 | @param info 当前直播信息
19 | @param block 切换回调⚠️block内需要弱引用(oldinifo,newinfo 与KVO类似,切换成功后的旧值和新值)
20 | @return self
21 | */
22 | - (instancetype)initWithMainView:(NSArray*)views
23 | Lives:(NSArray *)lives
24 | liveInfo:(LiveInfo *)info
25 | liveInfoDidChange:(void(^)(LiveInfo *oldInfo,LiveInfo *newInfo))block;
26 | @end
27 |
--------------------------------------------------------------------------------
/LiveDemo/controller/CoinsNum/CoinsNumController.h:
--------------------------------------------------------------------------------
1 | //
2 | // CoinsNumController.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/5/8.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "CoinsNumController.h"
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface CoinsNumController : UIViewController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/LiveDemo/controller/CoinsNum/CoinsNumController.m:
--------------------------------------------------------------------------------
1 | //
2 | // CoinsNumController.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/5/8.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "CoinsNumController.h"
10 | #import "NumberLabel.h"
11 | @interface CoinsNumController ()
12 |
13 | @end
14 |
15 | @implementation CoinsNumController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | self.view.backgroundColor = [UIColor whiteColor];
20 | [self initUI];
21 | }
22 | - (void)initUI{
23 | NumberLabel *label = [[NumberLabel alloc]initWithFrame:CGRectZero seconds:9.0 coins:123456789];
24 | [self.view addSubview:label];
25 | [label mas_makeConstraints:^(MASConstraintMaker *make) {
26 | make.center.mas_equalTo(self.view);
27 | make.width.mas_equalTo(200);
28 | make.height.mas_equalTo(30);
29 | }];
30 | [label start];
31 | }
32 |
33 | /*
34 | #pragma mark - Navigation
35 |
36 | // In a storyboard-based application, you will often want to do a little preparation before navigation
37 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
38 | // Get the new view controller using [segue destinationViewController].
39 | // Pass the selected object to the new view controller.
40 | }
41 | */
42 |
43 | @end
44 |
45 |
46 |
--------------------------------------------------------------------------------
/LiveDemo/controller/Gift/GiftViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // GiftViewController.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface GiftViewController : UIViewController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/LiveDemo/controller/Home/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/LiveDemo/controller/Home/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "SwitchLiveViewController.h"
11 | #import "GiftViewController.h"
12 | #import "CoinsNumController.h"
13 | NSString *switchSting = @"切换视图";
14 | NSString *giftString = @"礼物";
15 | NSString *coinsNumberString = @"金币跳动";
16 | @interface ViewController ()
17 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
18 | @property (nonatomic,strong) NSArray *datas;
19 | @end
20 |
21 | @implementation ViewController
22 |
23 | - (void)viewDidLoad {
24 | [super viewDidLoad];
25 | self.navigationController.view.backgroundColor = [UIColor whiteColor];
26 | self.datas = @[switchSting,giftString,coinsNumberString];
27 | // Do any additional setup after loading the view.
28 | }
29 | #pragma mark - delegate && dataScource
30 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
31 | return self.datas.count;
32 | }
33 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
34 | static NSString *identifier = @"cell";
35 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
36 | if (!cell) {
37 | cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
38 | }
39 | cell.textLabel.text = self.datas[indexPath.row];
40 | return cell;
41 | }
42 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
43 | NSString *name = self.datas[indexPath.row];
44 | if ([name isEqualToString:switchSting]) {
45 | SwitchLiveViewController *switchVC = [SwitchLiveViewController new];
46 | switchVC.title = name;
47 | [self.navigationController pushViewController:switchVC animated:YES];
48 | }
49 | else if ([name isEqualToString:giftString]){
50 | GiftViewController *giftVC = [GiftViewController alloc];
51 | giftVC.title = name;
52 | [self.navigationController pushViewController:giftVC animated:YES];
53 | }
54 | else if ([name isEqualToString:coinsNumberString]){
55 | CoinsNumController *coinsVC = [CoinsNumController alloc];
56 | coinsVC.title = name;
57 | [self.navigationController pushViewController:coinsVC animated:YES];
58 | }
59 | }
60 | @end
61 |
--------------------------------------------------------------------------------
/LiveDemo/controller/switchLive/SwitchLiveViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwitchLiveViewController.h
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SwitchLiveViewController : UIViewController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/LiveDemo/controller/switchLive/SwitchLiveViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // SwitchLiveViewController.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import "SwitchLiveViewController.h"
10 | #import "SwitchLiveView.h"
11 | @interface SwitchLiveViewController ()
12 | @property (nonatomic,strong) SwitchLiveView *switchLiveView;
13 | @end
14 |
15 | @implementation SwitchLiveViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | self.view.backgroundColor = [UIColor whiteColor];
20 | self.fd_prefersNavigationBarHidden = YES;
21 | [self initUI];
22 | }
23 | - (void)initUI{
24 | NSMutableArray *lives = [NSMutableArray new];
25 | LiveInfo *info1 = [LiveInfo new];
26 | info1.cover = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594220311562&di=508e4384d2b4ce38627cd9d316b7e4bb&imgtype=0&src=http%3A%2F%2Fwww.08lr.cn%2Fuploads%2Fallimg%2F170412%2F1-1F412152634.jpg";
27 | LiveInfo *info2 = [LiveInfo new];
28 | info2.cover = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594220311561&di=e3e696174434c825439d127689f4d7bc&imgtype=0&src=http%3A%2F%2Fyouimg1.c-ctrip.com%2Ftarget%2Ftg%2F055%2F224%2F049%2F96cb1a03b8c04627b10fafcb90b0eb9f.jpg";
29 | LiveInfo *info3 = [LiveInfo new];
30 | info3.cover = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594220311560&di=9b4b5350197919abab3474c04f193c02&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20180605%2F7d976e643aec4e0a920ad561e124d80d.jpeg";
31 | lives = @[info1,info2,info3].mutableCopy;
32 | // __weak typeof(self) weakself = self;
33 | self.switchLiveView = ({
34 | SwitchLiveView *switchView = [[SwitchLiveView alloc]initWithMainView:@[[UIView new]] Lives:lives liveInfo:info1 liveInfoDidChange:^(LiveInfo *oldInfo,LiveInfo *liveInfo) {
35 | if (oldInfo) {
36 |
37 | }
38 | }];
39 | [self.view insertSubview:switchView atIndex:0];
40 | switchView;
41 | });
42 | }
43 |
44 | @end
45 |
--------------------------------------------------------------------------------
/LiveDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // LiveDemo
4 | //
5 | // Created by 冯龙飞 on 2019/4/23.
6 | // Copyright © 2019 冯龙飞. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | platform :ios, '9.0'
3 |
4 | target 'LiveDemo' do
5 | pod 'SDWebImage', '~> 4.0'
6 | pod 'Masonry'
7 | pod 'FDFullscreenPopGesture', '1.1'
8 |
9 | end
10 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - FDFullscreenPopGesture (1.1)
3 | - Masonry (1.1.0)
4 | - SDWebImage (4.4.6):
5 | - SDWebImage/Core (= 4.4.6)
6 | - SDWebImage/Core (4.4.6)
7 |
8 | DEPENDENCIES:
9 | - FDFullscreenPopGesture (= 1.1)
10 | - Masonry
11 | - SDWebImage (~> 4.0)
12 |
13 | SPEC REPOS:
14 | https://github.com/CocoaPods/Specs.git:
15 | - FDFullscreenPopGesture
16 | - Masonry
17 | - SDWebImage
18 |
19 | SPEC CHECKSUMS:
20 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
21 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
22 | SDWebImage: 3f3f0c02f09798048c47a5ed0a13f17b063572d8
23 |
24 | PODFILE CHECKSUM: 9a6d6bbf5b291f5f23bb88ceba5e489fa9e0a45a
25 |
26 | COCOAPODS: 1.8.4
27 |
--------------------------------------------------------------------------------
/Pods/FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog )
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 |
23 | #import
24 |
25 | /// "UINavigation+FDFullscreenPopGesture" extends UINavigationController's swipe-
26 | /// to-pop behavior in iOS 7+ by supporting fullscreen pan gesture. Instead of
27 | /// screen edge, you can now swipe from any place on the screen and the onboard
28 | /// interactive pop transition works seamlessly.
29 | ///
30 | /// Adding the implementation file of this category to your target will
31 | /// automatically patch UINavigationController with this feature.
32 | @interface UINavigationController (FDFullscreenPopGesture)
33 |
34 | /// The gesture recognizer that actually handles interactive pop.
35 | @property (nonatomic, strong, readonly) UIPanGestureRecognizer *fd_fullscreenPopGestureRecognizer;
36 |
37 | /// A view controller is able to control navigation bar's appearance by itself,
38 | /// rather than a global way, checking "fd_prefersNavigationBarHidden" property.
39 | /// Default to YES, disable it if you don't want so.
40 | @property (nonatomic, assign) BOOL fd_viewControllerBasedNavigationBarAppearanceEnabled;
41 |
42 | @end
43 |
44 | /// Allows any view controller to disable interactive pop gesture, which might
45 | /// be necessary when the view controller itself handles pan gesture in some
46 | /// cases.
47 | @interface UIViewController (FDFullscreenPopGesture)
48 |
49 | /// Whether the interactive pop gesture is disabled when contained in a navigation
50 | /// stack.
51 | @property (nonatomic, assign) BOOL fd_interactivePopDisabled;
52 |
53 | /// Indicate this view controller prefers its navigation bar hidden or not,
54 | /// checked when view controller based navigation bar's appearance is enabled.
55 | /// Default to NO, bars are more likely to show.
56 | @property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/Pods/FDFullscreenPopGesture/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015
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 |
23 |
--------------------------------------------------------------------------------
/Pods/FDFullscreenPopGesture/README.md:
--------------------------------------------------------------------------------
1 | # FDFullscreenPopGesture
2 | An UINavigationController's category to enable fullscreen pop gesture in an iOS7+ system style with AOP.
3 |
4 | # Overview
5 |
6 | 
7 |
8 | 这个扩展来自 @J_雨 同学的这个很天才的思路,他的文章地址:[http://www.jianshu.com/p/d39f7d22db6c](http://www.jianshu.com/p/d39f7d22db6c)
9 |
10 | # Usage
11 |
12 | **AOP**, just add 2 files and **no need** for any setups, all navigation controllers will be able to use fullscreen pop gesture automatically.
13 |
14 | To disable this pop gesture of a navigation controller:
15 |
16 | ``` objc
17 | navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO;
18 | ```
19 |
20 | To disable this pop gesture of a view controller:
21 |
22 | ``` objc
23 | viewController.fd_interactivePopDisabled = YES;
24 | ```
25 |
26 | Require at least iOS **7.0**.
27 |
28 | # View Controller Based Navigation Bar Appearance
29 |
30 | It handles navigation bar transition properly when using fullscreen gesture to push or pop a view controller:
31 |
32 | - with bar -> without bar
33 | - without bar -> with bar
34 | - without bar -> without bar
35 |
36 | 
37 |
38 | This opmiziation is enabled by default, from now on you don't need to call **UINavigationController**'s `-setNavigationBarHidden:animated:` method, instead, use view controller's specific API to hide its bar:
39 |
40 | ``` objc
41 | - (void)viewDidLoad {
42 | [super viewDidLoad];
43 | self.fd_prefersNavigationBarHidden = NO;
44 | }
45 | ```
46 |
47 | And this property is **YES** by default.
48 |
49 | # Installation
50 |
51 | Use cocoapods
52 |
53 | ``` ruby
54 | pod 'FDFullscreenPopGesture', '1.1'
55 | ```
56 | # Release Notes
57 |
58 | **1.1** - View controller based navigation bar appearance and transition.
59 | **1.0** - Fullscreen pop gesture.
60 |
61 | # License
62 | MIT
63 |
--------------------------------------------------------------------------------
/Pods/Headers/Private/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h:
--------------------------------------------------------------------------------
1 | ../../../FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASCompositeConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASCompositeConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraint+Private.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint+Private.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraintMaker.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraintMaker.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASLayoutConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASLayoutConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASUtilities.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASUtilities.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewAttribute.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/Masonry.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/Masonry.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSArray+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSLayoutConstraint+MASDebugAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/View+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/View+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/ViewController+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/ViewController+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/NSButton+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSButton+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/NSImage+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSImage+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDAnimatedImageRep.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDAnimatedImageRep.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDImageCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDImageCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDImageCacheConfig.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDImageCacheConfig.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageCoderHelper.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCoderHelper.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageCodersManager.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCodersManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCompat.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageFrame.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageFrame.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageGIFCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageGIFCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageImageIOCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageImageIOCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageManager.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/SDWebImageTransition.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageTransition.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIButton+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImage+ForceDecode.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+ForceDecode.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImage+GIF.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+GIF.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIView+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIView+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h:
--------------------------------------------------------------------------------
1 | ../../../FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASCompositeConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASCompositeConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraint+Private.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint+Private.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraintMaker.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraintMaker.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASLayoutConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASLayoutConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASUtilities.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASUtilities.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewAttribute.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/Masonry.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/Masonry.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSArray+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSLayoutConstraint+MASDebugAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/View+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/View+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/ViewController+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/ViewController+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/NSButton+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSButton+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/NSImage+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/NSImage+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDAnimatedImageRep.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDAnimatedImageRep.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDImageCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDImageCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDImageCacheConfig.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDImageCacheConfig.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageCoderHelper.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCoderHelper.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageCodersManager.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCodersManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageCompat.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageFrame.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageFrame.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageGIFCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageGIFCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageImageIOCoder.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageImageIOCoder.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageManager.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/SDWebImageTransition.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/SDWebImageTransition.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIButton+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImage+ForceDecode.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+ForceDecode.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImage+GIF.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+GIF.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIView+WebCache.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIView+WebCache.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h:
--------------------------------------------------------------------------------
1 | ../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
--------------------------------------------------------------------------------
/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - FDFullscreenPopGesture (1.1)
3 | - Masonry (1.1.0)
4 | - SDWebImage (4.4.6):
5 | - SDWebImage/Core (= 4.4.6)
6 | - SDWebImage/Core (4.4.6)
7 |
8 | DEPENDENCIES:
9 | - FDFullscreenPopGesture (= 1.1)
10 | - Masonry
11 | - SDWebImage (~> 4.0)
12 |
13 | SPEC REPOS:
14 | https://github.com/CocoaPods/Specs.git:
15 | - FDFullscreenPopGesture
16 | - Masonry
17 | - SDWebImage
18 |
19 | SPEC CHECKSUMS:
20 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
21 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
22 | SDWebImage: 3f3f0c02f09798048c47a5ed0a13f17b063572d8
23 |
24 | PODFILE CHECKSUM: 9a6d6bbf5b291f5f23bb88ceba5e489fa9e0a45a
25 |
26 | COCOAPODS: 1.8.4
27 |
--------------------------------------------------------------------------------
/Pods/Masonry/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASViewAttribute.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 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewAttribute.m:
--------------------------------------------------------------------------------
1 | //
2 | // MASViewAttribute.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 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASViewConstraint.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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSArray+MASAdditions.h
3 | //
4 | //
5 | // Created by Daniel Hammond on 11/26/13.
6 | //
7 | //
8 |
9 | #import "MASUtilities.h"
10 | #import "MASConstraintMaker.h"
11 | #import "MASViewAttribute.h"
12 |
13 | typedef NS_ENUM(NSUInteger, MASAxisType) {
14 | MASAxisTypeHorizontal,
15 | MASAxisTypeVertical
16 | };
17 |
18 | @interface NSArray (MASAdditions)
19 |
20 | /**
21 | * Creates a MASConstraintMaker with each view in the callee.
22 | * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view
23 | *
24 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
25 | *
26 | * @return Array of created MASConstraints
27 | */
28 | - (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
29 |
30 | /**
31 | * Creates a MASConstraintMaker with each view in the callee.
32 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
33 | * If an existing constraint exists then it will be updated instead.
34 | *
35 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
36 | *
37 | * @return Array of created/updated MASConstraints
38 | */
39 | - (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
40 |
41 | /**
42 | * Creates a MASConstraintMaker with each view in the callee.
43 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
44 | * All constraints previously installed for the views will be removed.
45 | *
46 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
47 | *
48 | * @return Array of created/updated MASConstraints
49 | */
50 | - (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
51 |
52 | /**
53 | * distribute with fixed spacing
54 | *
55 | * @param axisType which axis to distribute items along
56 | * @param fixedSpacing the spacing between each item
57 | * @param leadSpacing the spacing before the first item and the container
58 | * @param tailSpacing the spacing after the last item and the container
59 | */
60 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
61 |
62 | /**
63 | * distribute with fixed item size
64 | *
65 | * @param axisType which axis to distribute items along
66 | * @param fixedItemLength the fixed length of each item
67 | * @param leadSpacing the spacing before the first item and the container
68 | * @param tailSpacing the spacing after the last item and the container
69 | */
70 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
71 |
72 | @end
73 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/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 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/FDFullscreenPopGesture.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/Masonry.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/Pods-LiveDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/SDWebImage.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/fenglongfei.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | FDFullscreenPopGesture.xcscheme
8 |
9 | isShown
10 |
11 | orderHint
12 | 0
13 |
14 | Masonry.xcscheme
15 |
16 | isShown
17 |
18 | orderHint
19 | 1
20 |
21 | Pods-LiveDemo.xcscheme
22 |
23 | isShown
24 |
25 | orderHint
26 | 2
27 |
28 | SDWebImage.xcscheme
29 |
30 | isShown
31 |
32 | orderHint
33 | 3
34 |
35 |
36 | SuppressBuildableAutocreation
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2009-2017 Olivier Poitrey rs@dailymotion.com
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | * (c) Fabrice Aneche
5 | *
6 | * For the full copyright and license information, please view the LICENSE
7 | * file that was distributed with this source code.
8 | */
9 |
10 | #import
11 | #import "SDWebImageCompat.h"
12 |
13 | typedef NS_ENUM(NSInteger, SDImageFormat) {
14 | SDImageFormatUndefined = -1,
15 | SDImageFormatJPEG = 0,
16 | SDImageFormatPNG,
17 | SDImageFormatGIF,
18 | SDImageFormatTIFF,
19 | SDImageFormatWebP,
20 | SDImageFormatHEIC,
21 | SDImageFormatHEIF
22 | };
23 |
24 | @interface NSData (ImageContentType)
25 |
26 | /**
27 | * Return image format
28 | *
29 | * @param data the input image data
30 | *
31 | * @return the image format as `SDImageFormat` (enum)
32 | */
33 | + (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data;
34 |
35 | /**
36 | * Convert SDImageFormat to UTType
37 | *
38 | * @param format Format as SDImageFormat
39 | * @return The UTType as CFStringRef
40 | */
41 | + (nonnull CFStringRef)sd_UTTypeFromSDImageFormat:(SDImageFormat)format;
42 |
43 | /**
44 | * Convert UTTyppe to SDImageFormat
45 | *
46 | * @param uttype The UTType as CFStringRef
47 | * @return The Format as SDImageFormat
48 | */
49 | + (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype;
50 |
51 | @end
52 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/NSImage+WebCache.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if SD_MAC
12 |
13 | #import
14 |
15 | @interface NSImage (WebCache)
16 |
17 | - (CGImageRef)CGImage;
18 | - (NSArray *)images;
19 | - (BOOL)isGIF;
20 |
21 | @end
22 |
23 | #endif
24 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/NSImage+WebCache.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "NSImage+WebCache.h"
10 |
11 | #if SD_MAC
12 |
13 | @implementation NSImage (WebCache)
14 |
15 | - (CGImageRef)CGImage {
16 | NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
17 | CGImageRef cgImage = [self CGImageForProposedRect:&imageRect context:NULL hints:nil];
18 | return cgImage;
19 | }
20 |
21 | - (NSArray *)images {
22 | return nil;
23 | }
24 |
25 | - (BOOL)isGIF {
26 | BOOL isGIF = NO;
27 | for (NSImageRep *rep in self.representations) {
28 | if ([rep isKindOfClass:[NSBitmapImageRep class]]) {
29 | NSBitmapImageRep *bitmapRep = (NSBitmapImageRep *)rep;
30 | NSUInteger frameCount = [[bitmapRep valueForProperty:NSImageFrameCount] unsignedIntegerValue];
31 | isGIF = frameCount > 1 ? YES : NO;
32 | break;
33 | }
34 | }
35 | return isGIF;
36 | }
37 |
38 | @end
39 |
40 | #endif
41 |
42 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDAnimatedImageRep.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if SD_MAC
12 |
13 | // A subclass of `NSBitmapImageRep` to fix that GIF loop count issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`.
14 | // Built in GIF coder use this instead of `NSBitmapImageRep` for better GIF rendering. If you do not want this, only enable `SDWebImageImageIOCoder`, which just call `NSImage` API and actually use `NSBitmapImageRep` for GIF image.
15 |
16 | @interface SDAnimatedImageRep : NSBitmapImageRep
17 |
18 | @end
19 |
20 | #endif
21 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDAnimatedImageRep.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDAnimatedImageRep.h"
10 |
11 | #if SD_MAC
12 |
13 | #import "SDWebImageGIFCoder.h"
14 |
15 | @interface SDWebImageGIFCoder ()
16 |
17 | - (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source;
18 |
19 | @end
20 |
21 | @interface SDAnimatedImageRep ()
22 |
23 | @property (nonatomic, assign, readonly, nullable) CGImageSourceRef imageSource;
24 |
25 | @end
26 |
27 | @implementation SDAnimatedImageRep
28 |
29 | // `NSBitmapImageRep` will use `kCGImagePropertyGIFDelayTime` whenever you call `setProperty:withValue:` with `NSImageCurrentFrame` to change the current frame. We override it and use the actual `kCGImagePropertyGIFUnclampedDelayTime` if need.
30 | - (void)setProperty:(NSBitmapImageRepPropertyKey)property withValue:(id)value {
31 | [super setProperty:property withValue:value];
32 | if ([property isEqualToString:NSImageCurrentFrame]) {
33 | // Access the image source
34 | CGImageSourceRef imageSource = self.imageSource;
35 | if (!imageSource) {
36 | return;
37 | }
38 | // Check format type
39 | CFStringRef type = CGImageSourceGetType(imageSource);
40 | if (!type) {
41 | return;
42 | }
43 | NSUInteger index = [value unsignedIntegerValue];
44 | float frameDuration = 0;
45 | // Through we currently process GIF only, in the 5.x we support APNG so we keep the extensibility
46 | if (CFStringCompare(type, kUTTypeGIF, 0) == kCFCompareEqualTo) {
47 | frameDuration = [[SDWebImageGIFCoder sharedCoder] sd_frameDurationAtIndex:index source:imageSource];
48 | }
49 | if (!frameDuration) {
50 | return;
51 | }
52 | // Reset super frame duration with the actual frame duration
53 | [super setProperty:NSImageCurrentFrameDuration withValue:@(frameDuration)];
54 | }
55 | }
56 |
57 | - (CGImageSourceRef)imageSource {
58 | if (_tiffData) {
59 | return (__bridge CGImageSourceRef)(_tiffData);
60 | }
61 | return NULL;
62 | }
63 |
64 | @end
65 |
66 | #endif
67 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCompat.h"
11 |
12 | typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) {
13 | /**
14 | * When the image is accessed it will update this value
15 | */
16 | SDImageCacheConfigExpireTypeAccessDate,
17 | /**
18 | * The image was obtained from the disk cache (Default)
19 | */
20 | SDImageCacheConfigExpireTypeModificationDate
21 | };
22 |
23 | @interface SDImageCacheConfig : NSObject
24 |
25 | /**
26 | * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
27 | * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
28 | */
29 | @property (assign, nonatomic) BOOL shouldDecompressImages;
30 |
31 | /**
32 | * Whether or not to disable iCloud backup
33 | * Defaults to YES.
34 | */
35 | @property (assign, nonatomic) BOOL shouldDisableiCloud;
36 |
37 | /**
38 | * Whether or not to use memory cache
39 | * @note When the memory cache is disabled, the weak memory cache will also be disabled.
40 | * Defaults to YES.
41 | */
42 | @property (assign, nonatomic) BOOL shouldCacheImagesInMemory;
43 |
44 | /**
45 | * The option to control weak memory cache for images. When enable, `SDImageCache`'s memory cache will use a weak maptable to store the image at the same time when it stored to memory, and get removed at the same time.
46 | * However when memory warning is triggered, since the weak maptable does not hold a strong reference to image instacnce, even when the memory cache itself is purged, some images which are held strongly by UIImageViews or other live instances can be recovered again, to avoid later re-query from disk cache or network. This may be helpful for the case, for example, when app enter background and memory is purged, cause cell flashing after re-enter foreground.
47 | * Defautls to YES. You can change this option dynamically.
48 | */
49 | @property (assign, nonatomic) BOOL shouldUseWeakMemoryCache;
50 |
51 | /**
52 | * The reading options while reading cache from disk.
53 | * Defaults to 0. You can set this to `NSDataReadingMappedIfSafe` to improve performance.
54 | */
55 | @property (assign, nonatomic) NSDataReadingOptions diskCacheReadingOptions;
56 |
57 | /**
58 | * The writing options while writing cache to disk.
59 | * Defaults to `NSDataWritingAtomic`. You can set this to `NSDataWritingWithoutOverwriting` to prevent overwriting an existing file.
60 | */
61 | @property (assign, nonatomic) NSDataWritingOptions diskCacheWritingOptions;
62 |
63 | /**
64 | * The maximum length of time to keep an image in the cache, in seconds.
65 | */
66 | @property (assign, nonatomic) NSInteger maxCacheAge;
67 |
68 | /**
69 | * The maximum size of the cache, in bytes.
70 | */
71 | @property (assign, nonatomic) NSUInteger maxCacheSize;
72 |
73 | /**
74 | * The attribute which the clear cache will be checked against when clearing the disk cache
75 | * Default is Modified Date
76 | */
77 | @property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType;
78 |
79 | @end
80 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDImageCacheConfig.h"
10 |
11 | static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
12 |
13 | @implementation SDImageCacheConfig
14 |
15 | - (instancetype)init {
16 | if (self = [super init]) {
17 | _shouldDecompressImages = YES;
18 | _shouldDisableiCloud = YES;
19 | _shouldCacheImagesInMemory = YES;
20 | _shouldUseWeakMemoryCache = YES;
21 | _diskCacheReadingOptions = 0;
22 | _diskCacheWritingOptions = NSDataWritingAtomic;
23 | _maxCacheAge = kDefaultCacheMaxCacheAge;
24 | _maxCacheSize = 0;
25 | _diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate;
26 | }
27 | return self;
28 | }
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCoder.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCompat.h"
11 | #import "NSData+ImageContentType.h"
12 |
13 | /**
14 | A Boolean value indicating whether to scale down large images during decompressing. (NSNumber)
15 | */
16 | FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageCoderScaleDownLargeImagesKey;
17 |
18 | /**
19 | Return the shared device-dependent RGB color space created with CGColorSpaceCreateDeviceRGB.
20 |
21 | @return The device-dependent RGB color space
22 | */
23 | CG_EXTERN CGColorSpaceRef _Nonnull SDCGColorSpaceGetDeviceRGB(void);
24 |
25 | /**
26 | Check whether CGImageRef contains alpha channel.
27 |
28 | @param imageRef The CGImageRef
29 | @return Return YES if CGImageRef contains alpha channel, otherwise return NO
30 | */
31 | CG_EXTERN BOOL SDCGImageRefContainsAlpha(_Nullable CGImageRef imageRef);
32 |
33 |
34 | /**
35 | This is the image coder protocol to provide custom image decoding/encoding.
36 | These methods are all required to implement.
37 | @note Pay attention that these methods are not called from main queue.
38 | */
39 | @protocol SDWebImageCoder
40 |
41 | @required
42 | #pragma mark - Decoding
43 | /**
44 | Returns YES if this coder can decode some data. Otherwise, the data should be passed to another coder.
45 |
46 | @param data The image data so we can look at it
47 | @return YES if this coder can decode the data, NO otherwise
48 | */
49 | - (BOOL)canDecodeFromData:(nullable NSData *)data;
50 |
51 | /**
52 | Decode the image data to image.
53 |
54 | @param data The image data to be decoded
55 | @return The decoded image from data
56 | */
57 | - (nullable UIImage *)decodedImageWithData:(nullable NSData *)data;
58 |
59 | /**
60 | Decompress the image with original image and image data.
61 |
62 | @param image The original image to be decompressed
63 | @param data The pointer to original image data. The pointer itself is nonnull but image data can be null. This data will set to cache if needed. If you do not need to modify data at the sametime, ignore this param.
64 | @param optionsDict A dictionary containing any decompressing options. Pass {SDWebImageCoderScaleDownLargeImagesKey: @(YES)} to scale down large images
65 | @return The decompressed image
66 | */
67 | - (nullable UIImage *)decompressedImageWithImage:(nullable UIImage *)image
68 | data:(NSData * _Nullable * _Nonnull)data
69 | options:(nullable NSDictionary*)optionsDict;
70 |
71 | #pragma mark - Encoding
72 |
73 | /**
74 | Returns YES if this coder can encode some image. Otherwise, it should be passed to another coder.
75 |
76 | @param format The image format
77 | @return YES if this coder can encode the image, NO otherwise
78 | */
79 | - (BOOL)canEncodeToFormat:(SDImageFormat)format;
80 |
81 | /**
82 | Encode the image to image data.
83 |
84 | @param image The image to be encoded
85 | @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible
86 | @return The encoded image data
87 | */
88 | - (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image format:(SDImageFormat)format;
89 |
90 | @end
91 |
92 |
93 | /**
94 | This is the image coder protocol to provide custom progressive image decoding.
95 | These methods are all required to implement.
96 | @note Pay attention that these methods are not called from main queue.
97 | */
98 | @protocol SDWebImageProgressiveCoder
99 |
100 | @required
101 | /**
102 | Returns YES if this coder can incremental decode some data. Otherwise, it should be passed to another coder.
103 |
104 | @param data The image data so we can look at it
105 | @return YES if this coder can decode the data, NO otherwise
106 | */
107 | - (BOOL)canIncrementallyDecodeFromData:(nullable NSData *)data;
108 |
109 | /**
110 | Incremental decode the image data to image.
111 |
112 | @param data The image data has been downloaded so far
113 | @param finished Whether the download has finished
114 | @warning because incremental decoding need to keep the decoded context, we will alloc a new instance with the same class for each download operation to avoid conflicts
115 | @return The decoded image from data
116 | */
117 | - (nullable UIImage *)incrementallyDecodedImageWithData:(nullable NSData *)data finished:(BOOL)finished;
118 |
119 | @end
120 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCoder.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCoder.h"
10 |
11 | NSString * const SDWebImageCoderScaleDownLargeImagesKey = @"scaleDownLargeImages";
12 |
13 | CGColorSpaceRef SDCGColorSpaceGetDeviceRGB(void) {
14 | static CGColorSpaceRef colorSpace;
15 | static dispatch_once_t onceToken;
16 | dispatch_once(&onceToken, ^{
17 | colorSpace = CGColorSpaceCreateDeviceRGB();
18 | });
19 | return colorSpace;
20 | }
21 |
22 | BOOL SDCGImageRefContainsAlpha(CGImageRef imageRef) {
23 | if (!imageRef) {
24 | return NO;
25 | }
26 | CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
27 | BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone ||
28 | alphaInfo == kCGImageAlphaNoneSkipFirst ||
29 | alphaInfo == kCGImageAlphaNoneSkipLast);
30 | return hasAlpha;
31 | }
32 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCoderHelper.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCompat.h"
11 | #import "SDWebImageFrame.h"
12 |
13 | @interface SDWebImageCoderHelper : NSObject
14 |
15 | /**
16 | Return an animated image with frames array.
17 | For UIKit, this will apply the patch and then create animated UIImage. The patch is because that `+[UIImage animatedImageWithImages:duration:]` just use the average of duration for each image. So it will not work if different frame has different duration. Therefore we repeat the specify frame for specify times to let it work.
18 | For AppKit, NSImage does not support animates other than GIF. This will try to encode the frames to GIF format and then create an animated NSImage for rendering. Attention the animated image may loss some detail if the input frames contain full alpha channel because GIF only supports 1 bit alpha channel. (For 1 pixel, either transparent or not)
19 |
20 | @param frames The frames array. If no frames or frames is empty, return nil
21 | @return A animated image for rendering on UIImageView(UIKit) or NSImageView(AppKit)
22 | */
23 | + (UIImage * _Nullable)animatedImageWithFrames:(NSArray * _Nullable)frames;
24 |
25 | /**
26 | Return frames array from an animated image.
27 | For UIKit, this will unapply the patch for the description above and then create frames array. This will also work for normal animated UIImage.
28 | For AppKit, NSImage does not support animates other than GIF. This will try to decode the GIF imageRep and then create frames array.
29 |
30 | @param animatedImage A animated image. If it's not animated, return nil
31 | @return The frames array
32 | */
33 | + (NSArray * _Nullable)framesFromAnimatedImage:(UIImage * _Nullable)animatedImage;
34 |
35 | #if SD_UIKIT || SD_WATCH
36 | /**
37 | Convert an EXIF image orientation to an iOS one.
38 |
39 | @param exifOrientation EXIF orientation
40 | @return iOS orientation
41 | */
42 | + (UIImageOrientation)imageOrientationFromEXIFOrientation:(NSInteger)exifOrientation;
43 | /**
44 | Convert an iOS orientation to an EXIF image orientation.
45 |
46 | @param imageOrientation iOS orientation
47 | @return EXIF orientation
48 | */
49 | + (NSInteger)exifOrientationFromImageOrientation:(UIImageOrientation)imageOrientation;
50 | #endif
51 |
52 | @end
53 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCoder.h"
11 |
12 | /**
13 | Global object holding the array of coders, so that we avoid passing them from object to object.
14 | Uses a priority queue behind scenes, which means the latest added coders have the highest priority.
15 | This is done so when encoding/decoding something, we go through the list and ask each coder if they can handle the current data.
16 | That way, users can add their custom coders while preserving our existing prebuilt ones
17 |
18 | Note: the `coders` getter will return the coders in their reversed order
19 | Example:
20 | - by default we internally set coders = `IOCoder`, `WebPCoder`. (`GIFCoder` is not recommended to add only if you want to get GIF support without `FLAnimatedImage`)
21 | - calling `coders` will return `@[WebPCoder, IOCoder]`
22 | - call `[addCoder:[MyCrazyCoder new]]`
23 | - calling `coders` now returns `@[MyCrazyCoder, WebPCoder, IOCoder]`
24 |
25 | Coders
26 | ------
27 | A coder must conform to the `SDWebImageCoder` protocol or even to `SDWebImageProgressiveCoder` if it supports progressive decoding
28 | Conformance is important because that way, they will implement `canDecodeFromData` or `canEncodeToFormat`
29 | Those methods are called on each coder in the array (using the priority order) until one of them returns YES.
30 | That means that coder can decode that data / encode to that format
31 | */
32 | @interface SDWebImageCodersManager : NSObject
33 |
34 | /**
35 | Shared reusable instance
36 | */
37 | + (nonnull instancetype)sharedInstance;
38 |
39 | /**
40 | All coders in coders manager. The coders array is a priority queue, which means the later added coder will have the highest priority
41 | */
42 | @property (nonatomic, copy, readwrite, nullable) NSArray> *coders;
43 |
44 | /**
45 | Add a new coder to the end of coders array. Which has the highest priority.
46 |
47 | @param coder coder
48 | */
49 | - (void)addCoder:(nonnull id)coder;
50 |
51 | /**
52 | Remove a coder in the coders array.
53 |
54 | @param coder coder
55 | */
56 | - (void)removeCoder:(nonnull id)coder;
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | * (c) Jamie Pinkham
5 | *
6 | * For the full copyright and license information, please view the LICENSE
7 | * file that was distributed with this source code.
8 | */
9 |
10 | #import
11 |
12 | #ifdef __OBJC_GC__
13 | #error SDWebImage does not support Objective-C Garbage Collection
14 | #endif
15 |
16 | // Apple's defines from TargetConditionals.h are a bit weird.
17 | // Seems like TARGET_OS_MAC is always defined (on all platforms).
18 | // To determine if we are running on OSX, we can only rely on TARGET_OS_IPHONE=0 and all the other platforms
19 | #if !TARGET_OS_IPHONE && !TARGET_OS_IOS && !TARGET_OS_TV && !TARGET_OS_WATCH
20 | #define SD_MAC 1
21 | #else
22 | #define SD_MAC 0
23 | #endif
24 |
25 | // iOS and tvOS are very similar, UIKit exists on both platforms
26 | // Note: watchOS also has UIKit, but it's very limited
27 | #if TARGET_OS_IOS || TARGET_OS_TV
28 | #define SD_UIKIT 1
29 | #else
30 | #define SD_UIKIT 0
31 | #endif
32 |
33 | #if TARGET_OS_IOS
34 | #define SD_IOS 1
35 | #else
36 | #define SD_IOS 0
37 | #endif
38 |
39 | #if TARGET_OS_TV
40 | #define SD_TV 1
41 | #else
42 | #define SD_TV 0
43 | #endif
44 |
45 | #if TARGET_OS_WATCH
46 | #define SD_WATCH 1
47 | #else
48 | #define SD_WATCH 0
49 | #endif
50 |
51 |
52 | #if SD_MAC
53 | #import
54 | #ifndef UIImage
55 | #define UIImage NSImage
56 | #endif
57 | #ifndef UIImageView
58 | #define UIImageView NSImageView
59 | #endif
60 | #ifndef UIView
61 | #define UIView NSView
62 | #endif
63 | #else
64 | #if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
65 | #error SDWebImage doesn't support Deployment Target version < 5.0
66 | #endif
67 |
68 | #if SD_UIKIT
69 | #import
70 | #endif
71 | #if SD_WATCH
72 | #import
73 | #ifndef UIView
74 | #define UIView WKInterfaceObject
75 | #endif
76 | #ifndef UIImageView
77 | #define UIImageView WKInterfaceImage
78 | #endif
79 | #endif
80 | #endif
81 |
82 | #ifndef NS_ENUM
83 | #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
84 | #endif
85 |
86 | #ifndef NS_OPTIONS
87 | #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
88 | #endif
89 |
90 | FOUNDATION_EXPORT UIImage *SDScaledImageForKey(NSString *key, UIImage *image);
91 |
92 | typedef void(^SDWebImageNoParamsBlock)(void);
93 |
94 | FOUNDATION_EXPORT NSString *const SDWebImageErrorDomain;
95 |
96 | #ifndef dispatch_queue_async_safe
97 | #define dispatch_queue_async_safe(queue, block)\
98 | if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(queue)) {\
99 | block();\
100 | } else {\
101 | dispatch_async(queue, block);\
102 | }
103 | #endif
104 |
105 | #ifndef dispatch_main_async_safe
106 | #define dispatch_main_async_safe(block) dispatch_queue_async_safe(dispatch_get_main_queue(), block)
107 | #endif
108 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 | #import "UIImage+MultiFormat.h"
11 |
12 | #if !__has_feature(objc_arc)
13 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
14 | #endif
15 |
16 | #if !OS_OBJECT_USE_OBJC
17 | #error SDWebImage need ARC for dispatch object
18 | #endif
19 |
20 | inline UIImage *SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullable image) {
21 | if (!image) {
22 | return nil;
23 | }
24 |
25 | #if SD_MAC
26 | return image;
27 | #elif SD_UIKIT || SD_WATCH
28 | if ((image.images).count > 0) {
29 | NSMutableArray *scaledImages = [NSMutableArray array];
30 |
31 | for (UIImage *tempImage in image.images) {
32 | [scaledImages addObject:SDScaledImageForKey(key, tempImage)];
33 | }
34 |
35 | UIImage *animatedImage = [UIImage animatedImageWithImages:scaledImages duration:image.duration];
36 | if (animatedImage) {
37 | animatedImage.sd_imageLoopCount = image.sd_imageLoopCount;
38 | animatedImage.sd_imageFormat = image.sd_imageFormat;
39 | }
40 | return animatedImage;
41 | } else {
42 | #if SD_WATCH
43 | if ([[WKInterfaceDevice currentDevice] respondsToSelector:@selector(screenScale)]) {
44 | #elif SD_UIKIT
45 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
46 | #endif
47 | CGFloat scale = 1;
48 | if (key.length >= 8) {
49 | NSRange range = [key rangeOfString:@"@2x."];
50 | if (range.location != NSNotFound) {
51 | scale = 2.0;
52 | }
53 |
54 | range = [key rangeOfString:@"@3x."];
55 | if (range.location != NSNotFound) {
56 | scale = 3.0;
57 | }
58 | }
59 |
60 | if (scale != image.scale) {
61 | UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
62 | scaledImage.sd_imageFormat = image.sd_imageFormat;
63 | image = scaledImage;
64 | }
65 | }
66 | return image;
67 | }
68 | #endif
69 | }
70 |
71 | NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain";
72 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageFrame.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCompat.h"
11 |
12 | @interface SDWebImageFrame : NSObject
13 |
14 | // This class is used for creating animated images via `animatedImageWithFrames` in `SDWebImageCoderHelper`. Attention if you need to specify animated images loop count, use `sd_imageLoopCount` property in `UIImage+MultiFormat`.
15 |
16 | /**
17 | The image of current frame. You should not set an animated image.
18 | */
19 | @property (nonatomic, strong, readonly, nonnull) UIImage *image;
20 | /**
21 | The duration of current frame to be displayed. The number is seconds but not milliseconds. You should not set this to zero.
22 | */
23 | @property (nonatomic, readonly, assign) NSTimeInterval duration;
24 |
25 | /**
26 | Create a frame instance with specify image and duration
27 |
28 | @param image current frame's image
29 | @param duration current frame's duration
30 | @return frame instance
31 | */
32 | + (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration;
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageFrame.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageFrame.h"
10 |
11 | @interface SDWebImageFrame ()
12 |
13 | @property (nonatomic, strong, readwrite, nonnull) UIImage *image;
14 | @property (nonatomic, readwrite, assign) NSTimeInterval duration;
15 |
16 | @end
17 |
18 | @implementation SDWebImageFrame
19 |
20 | + (instancetype)frameWithImage:(UIImage *)image duration:(NSTimeInterval)duration {
21 | SDWebImageFrame *frame = [[SDWebImageFrame alloc] init];
22 | frame.image = image;
23 | frame.duration = duration;
24 |
25 | return frame;
26 | }
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageGIFCoder.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCoder.h"
11 |
12 | /**
13 | Built in coder using ImageIO that supports GIF encoding/decoding
14 | @note `SDWebImageIOCoder` supports GIF but only as static (will use the 1st frame).
15 | @note Use `SDWebImageGIFCoder` for fully animated GIFs - less performant than `FLAnimatedImage`
16 | @note If you decide to make all `UIImageView`(including `FLAnimatedImageView`) instance support GIF. You should add this coder to `SDWebImageCodersManager` and make sure that it has a higher priority than `SDWebImageIOCoder`
17 | @note The recommended approach for animated GIFs is using `FLAnimatedImage`. It's more performant than `UIImageView` for GIF displaying
18 | */
19 | @interface SDWebImageGIFCoder : NSObject
20 |
21 | + (nonnull instancetype)sharedCoder;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageImageIOCoder.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageCoder.h"
11 |
12 | /**
13 | Built in coder that supports PNG, JPEG, TIFF, includes support for progressive decoding.
14 |
15 | GIF
16 | Also supports static GIF (meaning will only handle the 1st frame).
17 | For a full GIF support, we recommend `FLAnimatedImage` or our less performant `SDWebImageGIFCoder`
18 |
19 | HEIC
20 | This coder also supports HEIC format because ImageIO supports it natively. But it depends on the system capabilities, so it won't work on all devices, see: https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf
21 | Decode(Software): !Simulator && (iOS 11 || tvOS 11 || macOS 10.13)
22 | Decode(Hardware): !Simulator && ((iOS 11 && A9Chip) || (macOS 10.13 && 6thGenerationIntelCPU))
23 | Encode(Software): macOS 10.13
24 | Encode(Hardware): !Simulator && ((iOS 11 && A10FusionChip) || (macOS 10.13 && 6thGenerationIntelCPU))
25 | */
26 | @interface SDWebImageImageIOCoder : NSObject
27 |
28 | + (nonnull instancetype)sharedCoder;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 |
11 | @protocol SDWebImageOperation
12 |
13 | - (void)cancel;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageManager.h"
11 |
12 | @class SDWebImagePrefetcher;
13 |
14 | @protocol SDWebImagePrefetcherDelegate
15 |
16 | @optional
17 |
18 | /**
19 | * Called when an image was prefetched.
20 | *
21 | * @param imagePrefetcher The current image prefetcher
22 | * @param imageURL The image url that was prefetched
23 | * @param finishedCount The total number of images that were prefetched (successful or not)
24 | * @param totalCount The total number of images that were to be prefetched
25 | */
26 | - (void)imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(nullable NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount;
27 |
28 | /**
29 | * Called when all images are prefetched.
30 | * @param imagePrefetcher The current image prefetcher
31 | * @param totalCount The total number of images that were prefetched (whether successful or not)
32 | * @param skippedCount The total number of images that were skipped
33 | */
34 | - (void)imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount;
35 |
36 | @end
37 |
38 | typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls);
39 | typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls);
40 |
41 | /**
42 | * Prefetch some URLs in the cache for future use. Images are downloaded in low priority.
43 | */
44 | @interface SDWebImagePrefetcher : NSObject
45 |
46 | /**
47 | * The web image manager
48 | */
49 | @property (strong, nonatomic, readonly, nonnull) SDWebImageManager *manager;
50 |
51 | /**
52 | * Maximum number of URLs to prefetch at the same time. Defaults to 3.
53 | */
54 | @property (nonatomic, assign) NSUInteger maxConcurrentDownloads;
55 |
56 | /**
57 | * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority.
58 | */
59 | @property (nonatomic, assign) SDWebImageOptions options;
60 |
61 | /**
62 | * Queue options for Prefetcher. Defaults to Main Queue.
63 | */
64 | @property (strong, nonatomic, nonnull) dispatch_queue_t prefetcherQueue;
65 |
66 | @property (weak, nonatomic, nullable) id delegate;
67 |
68 | /**
69 | * Return the global image prefetcher instance.
70 | */
71 | + (nonnull instancetype)sharedImagePrefetcher;
72 |
73 | /**
74 | * Allows you to instantiate a prefetcher with any arbitrary image manager.
75 | */
76 | - (nonnull instancetype)initWithImageManager:(nonnull SDWebImageManager *)manager NS_DESIGNATED_INITIALIZER;
77 |
78 | /**
79 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
80 | * currently one image is downloaded at a time,
81 | * and skips images for failed downloads and proceed to the next image in the list.
82 | * Any previously-running prefetch operations are canceled.
83 | *
84 | * @param urls list of URLs to prefetch
85 | */
86 | - (void)prefetchURLs:(nullable NSArray *)urls;
87 |
88 | /**
89 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
90 | * currently one image is downloaded at a time,
91 | * and skips images for failed downloads and proceed to the next image in the list.
92 | * Any previously-running prefetch operations are canceled.
93 | *
94 | * @param urls list of URLs to prefetch
95 | * @param progressBlock block to be called when progress updates;
96 | * first parameter is the number of completed (successful or not) requests,
97 | * second parameter is the total number of images originally requested to be prefetched
98 | * @param completionBlock block to be called when prefetching is completed
99 | * first param is the number of completed (successful or not) requests,
100 | * second parameter is the number of skipped requests
101 | */
102 | - (void)prefetchURLs:(nullable NSArray *)urls
103 | progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock
104 | completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock;
105 |
106 | /**
107 | * Remove and cancel queued list
108 | */
109 | - (void)cancelPrefetching;
110 |
111 |
112 | @end
113 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/SDWebImageTransition.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if SD_UIKIT || SD_MAC
12 | #import "SDImageCache.h"
13 |
14 | // This class is used to provide a transition animation after the view category load image finished. Use this on `sd_imageTransition` in UIView+WebCache.h
15 | // for UIKit(iOS & tvOS), we use `+[UIView transitionWithView:duration:options:animations:completion]` for transition animation.
16 | // for AppKit(macOS), we use `+[NSAnimationContext runAnimationGroup:completionHandler:]` for transition animation. You can call `+[NSAnimationContext currentContext]` to grab the context during animations block.
17 | // These transition are provided for basic usage. If you need complicated animation, consider to directly use Core Animation or use `SDWebImageAvoidAutoSetImage` and implement your own after image load finished.
18 |
19 | #if SD_UIKIT
20 | typedef UIViewAnimationOptions SDWebImageAnimationOptions;
21 | #else
22 | typedef NS_OPTIONS(NSUInteger, SDWebImageAnimationOptions) {
23 | SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext`
24 | };
25 | #endif
26 |
27 | typedef void (^SDWebImageTransitionPreparesBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL);
28 | typedef void (^SDWebImageTransitionAnimationsBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image);
29 | typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished);
30 |
31 | @interface SDWebImageTransition : NSObject
32 |
33 | /**
34 | By default, we set the image to the view at the beginning of the animtions. You can disable this and provide custom set image process
35 | */
36 | @property (nonatomic, assign) BOOL avoidAutoSetImage;
37 | /**
38 | The duration of the transition animation, measured in seconds. Defaults to 0.5.
39 | */
40 | @property (nonatomic, assign) NSTimeInterval duration;
41 | /**
42 | The timing function used for all animations within this transition animation (macOS).
43 | */
44 | @property (nonatomic, strong, nullable) CAMediaTimingFunction *timingFunction NS_AVAILABLE_MAC(10_7);
45 | /**
46 | A mask of options indicating how you want to perform the animations.
47 | */
48 | @property (nonatomic, assign) SDWebImageAnimationOptions animationOptions;
49 | /**
50 | A block object to be executed before the animation sequence starts.
51 | */
52 | @property (nonatomic, copy, nullable) SDWebImageTransitionPreparesBlock prepares;
53 | /**
54 | A block object that contains the changes you want to make to the specified view.
55 | */
56 | @property (nonatomic, copy, nullable) SDWebImageTransitionAnimationsBlock animations;
57 | /**
58 | A block object to be executed when the animation sequence ends.
59 | */
60 | @property (nonatomic, copy, nullable) SDWebImageTransitionCompletionBlock completion;
61 |
62 | @end
63 |
64 | // Convenience way to create transition. Remember to specify the duration if needed.
65 | // for UIKit, these transition just use the correspond `animationOptions`. By default we enable `UIViewAnimationOptionAllowUserInteraction` to allow user interaction during transition.
66 | // for AppKit, these transition use Core Animation in `animations`. So your view must be layer-backed. Set `wantsLayer = YES` before you apply it.
67 |
68 | @interface SDWebImageTransition (Conveniences)
69 |
70 | // class property is available in Xcode 8. We will drop the Xcode 7.3 support in 5.x
71 | #if __has_feature(objc_class_property)
72 | /// Fade transition.
73 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *fadeTransition;
74 | /// Flip from left transition.
75 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromLeftTransition;
76 | /// Flip from right transition.
77 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromRightTransition;
78 | /// Flip from top transition.
79 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromTopTransition;
80 | /// Flip from bottom transition.
81 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromBottomTransition;
82 | /// Curl up transition.
83 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlUpTransition;
84 | /// Curl down transition.
85 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlDownTransition;
86 | #else
87 | + (nonnull instancetype)fadeTransition;
88 | + (nonnull instancetype)flipFromLeftTransition;
89 | + (nonnull instancetype)flipFromRightTransition;
90 | + (nonnull instancetype)flipFromTopTransition;
91 | + (nonnull instancetype)flipFromBottomTransition;
92 | + (nonnull instancetype)curlUpTransition;
93 | + (nonnull instancetype)curlDownTransition;
94 | #endif
95 |
96 | @end
97 |
98 | #endif
99 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+ForceDecode.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | @interface UIImage (ForceDecode)
12 |
13 | + (nullable UIImage *)decodedImageWithImage:(nullable UIImage *)image;
14 |
15 | + (nullable UIImage *)decodedAndScaledDownImageWithImage:(nullable UIImage *)image;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+ForceDecode.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "UIImage+ForceDecode.h"
10 | #import "SDWebImageCodersManager.h"
11 |
12 | @implementation UIImage (ForceDecode)
13 |
14 | + (UIImage *)decodedImageWithImage:(UIImage *)image {
15 | if (!image) {
16 | return nil;
17 | }
18 | NSData *tempData;
19 | return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}];
20 | }
21 |
22 | + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image {
23 | if (!image) {
24 | return nil;
25 | }
26 | NSData *tempData;
27 | return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(YES)}];
28 | }
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+GIF.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | * (c) Laurin Brandner
5 | *
6 | * For the full copyright and license information, please view the LICENSE
7 | * file that was distributed with this source code.
8 | */
9 |
10 | #import "SDWebImageCompat.h"
11 |
12 | @interface UIImage (GIF)
13 |
14 | /**
15 | * Creates an animated UIImage from an NSData.
16 | * For static GIF, will create an UIImage with `images` array set to nil. For animated GIF, will create an UIImage with valid `images` array.
17 | */
18 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data;
19 |
20 | /**
21 | * Checks if an UIImage instance is a GIF. Will use the `images` array.
22 | */
23 | - (BOOL)isGIF;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+GIF.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | * (c) Laurin Brandner
5 | *
6 | * For the full copyright and license information, please view the LICENSE
7 | * file that was distributed with this source code.
8 | */
9 |
10 | #import "UIImage+GIF.h"
11 | #import "SDWebImageGIFCoder.h"
12 | #import "NSImage+WebCache.h"
13 |
14 | @implementation UIImage (GIF)
15 |
16 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data {
17 | if (!data) {
18 | return nil;
19 | }
20 | return [[SDWebImageGIFCoder sharedCoder] decodedImageWithData:data];
21 | }
22 |
23 | - (BOOL)isGIF {
24 | return (self.images != nil);
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | @interface UIImage (MemoryCacheCost)
12 |
13 | /**
14 | The memory cache cost for specify image used by image cache. The cost function is the pixles count held in memory.
15 | If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost.
16 |
17 | For `UIImage`, this method return the single frame pixles count when `image.images` is nil for static image. Retuen full frame pixels count when `image.images` is not nil for animated image.
18 | For `NSImage`, this method return the single frame pixels count because `NSImage` does not store all frames in memory.
19 | @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods.
20 | */
21 | @property (assign, nonatomic) NSUInteger sd_memoryCost;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "UIImage+MemoryCacheCost.h"
10 | #import "objc/runtime.h"
11 |
12 | FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) {
13 | #if SD_MAC
14 | return image.size.height * image.size.width;
15 | #elif SD_UIKIT || SD_WATCH
16 | NSUInteger imageSize = image.size.height * image.size.width * image.scale * image.scale;
17 | return image.images ? (imageSize * image.images.count) : imageSize;
18 | #endif
19 | }
20 |
21 | @implementation UIImage (MemoryCacheCost)
22 |
23 | - (NSUInteger)sd_memoryCost {
24 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost));
25 | NSUInteger memoryCost;
26 | if (value != nil) {
27 | memoryCost = [value unsignedIntegerValue];
28 | } else {
29 | memoryCost = SDMemoryCacheCostForImage(self);
30 | }
31 | return memoryCost;
32 | }
33 |
34 | - (void)setSd_memoryCost:(NSUInteger)sd_memoryCost {
35 | objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
36 | }
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 | #import "NSData+ImageContentType.h"
11 |
12 | @interface UIImage (MultiFormat)
13 |
14 | /**
15 | * UIKit:
16 | * For static image format, this value is always 0.
17 | * For animated image format, 0 means infinite looping.
18 | * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods.
19 | * AppKit:
20 | * NSImage currently only support animated via GIF imageRep unlike UIImage.
21 | * The getter of this property will get the loop count from GIF imageRep
22 | * The setter of this property will set the loop count from GIF imageRep
23 | */
24 | @property (nonatomic, assign) NSUInteger sd_imageLoopCount;
25 |
26 | /**
27 | * The image format represent the original compressed image data format.
28 | * If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value.
29 | * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods.
30 | */
31 | @property (nonatomic, assign) SDImageFormat sd_imageFormat;
32 |
33 | + (nullable UIImage *)sd_imageWithData:(nullable NSData *)data;
34 | - (nullable NSData *)sd_imageData;
35 | - (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat;
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "UIImage+MultiFormat.h"
10 | #import "NSImage+WebCache.h"
11 | #import "SDWebImageCodersManager.h"
12 | #import "objc/runtime.h"
13 |
14 | @implementation UIImage (MultiFormat)
15 |
16 | #if SD_MAC
17 | - (NSUInteger)sd_imageLoopCount {
18 | NSUInteger imageLoopCount = 0;
19 | for (NSImageRep *rep in self.representations) {
20 | if ([rep isKindOfClass:[NSBitmapImageRep class]]) {
21 | NSBitmapImageRep *bitmapRep = (NSBitmapImageRep *)rep;
22 | imageLoopCount = [[bitmapRep valueForProperty:NSImageLoopCount] unsignedIntegerValue];
23 | break;
24 | }
25 | }
26 | return imageLoopCount;
27 | }
28 |
29 | - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount {
30 | for (NSImageRep *rep in self.representations) {
31 | if ([rep isKindOfClass:[NSBitmapImageRep class]]) {
32 | NSBitmapImageRep *bitmapRep = (NSBitmapImageRep *)rep;
33 | [bitmapRep setProperty:NSImageLoopCount withValue:@(sd_imageLoopCount)];
34 | break;
35 | }
36 | }
37 | }
38 |
39 | #else
40 |
41 | - (NSUInteger)sd_imageLoopCount {
42 | NSUInteger imageLoopCount = 0;
43 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageLoopCount));
44 | if ([value isKindOfClass:[NSNumber class]]) {
45 | imageLoopCount = value.unsignedIntegerValue;
46 | }
47 | return imageLoopCount;
48 | }
49 |
50 | - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount {
51 | NSNumber *value = @(sd_imageLoopCount);
52 | objc_setAssociatedObject(self, @selector(sd_imageLoopCount), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
53 | }
54 | #endif
55 |
56 | - (SDImageFormat)sd_imageFormat {
57 | SDImageFormat imageFormat = SDImageFormatUndefined;
58 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageFormat));
59 | if ([value isKindOfClass:[NSNumber class]]) {
60 | imageFormat = value.integerValue;
61 | return imageFormat;
62 | }
63 | // Check CGImage's UTType, may return nil for non-Image/IO based image
64 | #pragma clang diagnostic push
65 | #pragma clang diagnostic ignored "-Wunguarded-availability"
66 | if (&CGImageGetUTType != NULL) {
67 | CFStringRef uttype = CGImageGetUTType(self.CGImage);
68 | imageFormat = [NSData sd_imageFormatFromUTType:uttype];
69 | }
70 | #pragma clang diagnostic pop
71 | return imageFormat;
72 | }
73 |
74 | - (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat {
75 | objc_setAssociatedObject(self, @selector(sd_imageFormat), @(sd_imageFormat), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
76 | }
77 |
78 | + (nullable UIImage *)sd_imageWithData:(nullable NSData *)data {
79 | return [[SDWebImageCodersManager sharedInstance] decodedImageWithData:data];
80 | }
81 |
82 | - (nullable NSData *)sd_imageData {
83 | return [self sd_imageDataAsFormat:SDImageFormatUndefined];
84 | }
85 |
86 | - (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat {
87 | NSData *imageData = nil;
88 | if (self) {
89 | imageData = [[SDWebImageCodersManager sharedInstance] encodedDataWithImage:self format:imageFormat];
90 | }
91 | return imageData;
92 | }
93 |
94 |
95 | @end
96 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if SD_UIKIT
12 |
13 | #import "SDWebImageManager.h"
14 |
15 | /**
16 | * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.
17 | */
18 | @interface UIImageView (HighlightedWebCache)
19 |
20 | /**
21 | * Set the imageView `highlightedImage` with an `url`.
22 | *
23 | * The download is asynchronous and cached.
24 | *
25 | * @param url The url for the image.
26 | */
27 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
28 |
29 | /**
30 | * Set the imageView `highlightedImage` with an `url` and custom options.
31 | *
32 | * The download is asynchronous and cached.
33 | *
34 | * @param url The url for the image.
35 | * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
36 | */
37 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url
38 | options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
39 |
40 | /**
41 | * Set the imageView `highlightedImage` with an `url`.
42 | *
43 | * The download is asynchronous and cached.
44 | *
45 | * @param url The url for the image.
46 | * @param completedBlock A block called when operation has been completed. This block has no return value
47 | * and takes the requested UIImage as first parameter. In case of error the image parameter
48 | * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
49 | * indicating if the image was retrieved from the local cache or from the network.
50 | * The fourth parameter is the original image url.
51 | */
52 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url
53 | completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;
54 |
55 | /**
56 | * Set the imageView `highlightedImage` with an `url` and custom options.
57 | *
58 | * The download is asynchronous and cached.
59 | *
60 | * @param url The url for the image.
61 | * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
62 | * @param completedBlock A block called when operation has been completed. This block has no return value
63 | * and takes the requested UIImage as first parameter. In case of error the image parameter
64 | * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
65 | * indicating if the image was retrieved from the local cache or from the network.
66 | * The fourth parameter is the original image url.
67 | */
68 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url
69 | options:(SDWebImageOptions)options
70 | completed:(nullable SDExternalCompletionBlock)completedBlock;
71 |
72 | /**
73 | * Set the imageView `highlightedImage` with an `url` and custom options.
74 | *
75 | * The download is asynchronous and cached.
76 | *
77 | * @param url The url for the image.
78 | * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
79 | * @param progressBlock A block called while image is downloading
80 | * @note the progress block is executed on a background queue
81 | * @param completedBlock A block called when operation has been completed. This block has no return value
82 | * and takes the requested UIImage as first parameter. In case of error the image parameter
83 | * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
84 | * indicating if the image was retrieved from the local cache or from the network.
85 | * The fourth parameter is the original image url.
86 | */
87 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url
88 | options:(SDWebImageOptions)options
89 | progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
90 | completed:(nullable SDExternalCompletionBlock)completedBlock;
91 |
92 | @end
93 |
94 | #endif
95 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "UIImageView+HighlightedWebCache.h"
10 |
11 | #if SD_UIKIT
12 |
13 | #import "UIView+WebCacheOperation.h"
14 | #import "UIView+WebCache.h"
15 |
16 | @implementation UIImageView (HighlightedWebCache)
17 |
18 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url {
19 | [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];
20 | }
21 |
22 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options {
23 | [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];
24 | }
25 |
26 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
27 | [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock];
28 | }
29 |
30 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
31 | [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock];
32 | }
33 |
34 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url
35 | options:(SDWebImageOptions)options
36 | progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
37 | completed:(nullable SDExternalCompletionBlock)completedBlock {
38 | __weak typeof(self)weakSelf = self;
39 | [self sd_internalSetImageWithURL:url
40 | placeholderImage:nil
41 | options:options
42 | operationKey:@"UIImageViewImageOperationHighlighted"
43 | setImageBlock:^(UIImage *image, NSData *imageData) {
44 | weakSelf.highlightedImage = image;
45 | }
46 | progress:progressBlock
47 | completed:completedBlock];
48 | }
49 |
50 | @end
51 |
52 | #endif
53 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "SDWebImageCompat.h"
10 | #import "SDWebImageOperation.h"
11 |
12 | // These methods are used to support canceling for UIView image loading, it's designed to be used internal but not external.
13 | // All the stored operations are weak, so it will be dalloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them.
14 | @interface UIView (WebCacheOperation)
15 |
16 | /**
17 | * Set the image load operation (storage in a UIView based weak map table)
18 | *
19 | * @param operation the operation
20 | * @param key key for storing the operation
21 | */
22 | - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key;
23 |
24 | /**
25 | * Cancel all operations for the current UIView and key
26 | *
27 | * @param key key for identifying the operations
28 | */
29 | - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key;
30 |
31 | /**
32 | * Just remove the operations corresponding to the current UIView and key without cancelling them
33 | *
34 | * @param key key for identifying the operations
35 | */
36 | - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key;
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import "UIView+WebCacheOperation.h"
10 | #import "objc/runtime.h"
11 |
12 | static char loadOperationKey;
13 |
14 | // key is copy, value is weak because operation instance is retained by SDWebImageManager's runningOperations property
15 | // we should use lock to keep thread-safe because these method may not be acessed from main queue
16 | typedef NSMapTable> SDOperationsDictionary;
17 |
18 | @implementation UIView (WebCacheOperation)
19 |
20 | - (SDOperationsDictionary *)sd_operationDictionary {
21 | @synchronized(self) {
22 | SDOperationsDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);
23 | if (operations) {
24 | return operations;
25 | }
26 | operations = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0];
27 | objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
28 | return operations;
29 | }
30 | }
31 |
32 | - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key {
33 | if (key) {
34 | [self sd_cancelImageLoadOperationWithKey:key];
35 | if (operation) {
36 | SDOperationsDictionary *operationDictionary = [self sd_operationDictionary];
37 | @synchronized (self) {
38 | [operationDictionary setObject:operation forKey:key];
39 | }
40 | }
41 | }
42 | }
43 |
44 | - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key {
45 | if (key) {
46 | // Cancel in progress downloader from queue
47 | SDOperationsDictionary *operationDictionary = [self sd_operationDictionary];
48 | id operation;
49 |
50 | @synchronized (self) {
51 | operation = [operationDictionary objectForKey:key];
52 | }
53 | if (operation) {
54 | if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]) {
55 | [operation cancel];
56 | }
57 | @synchronized (self) {
58 | [operationDictionary removeObjectForKey:key];
59 | }
60 | }
61 | }
62 | }
63 |
64 | - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key {
65 | if (key) {
66 | SDOperationsDictionary *operationDictionary = [self sd_operationDictionary];
67 | @synchronized (self) {
68 | [operationDictionary removeObjectForKey:key];
69 | }
70 | }
71 | }
72 |
73 | @end
74 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_FDFullscreenPopGesture : NSObject
3 | @end
4 | @implementation PodsDummy_FDFullscreenPopGesture
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FDFullscreenPopGesture" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FDFullscreenPopGesture
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Masonry : NSObject
3 | @end
4 | @implementation PodsDummy_Masonry
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-LiveDemo/Pods-LiveDemo-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## FDFullscreenPopGesture
5 |
6 | The MIT License (MIT)
7 |
8 | Copyright (c) 2015
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 |
29 |
30 | ## Masonry
31 |
32 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry
33 |
34 | Permission is hereby granted, free of charge, to any person obtaining a copy
35 | of this software and associated documentation files (the "Software"), to deal
36 | in the Software without restriction, including without limitation the rights
37 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38 | copies of the Software, and to permit persons to whom the Software is
39 | furnished to do so, subject to the following conditions:
40 |
41 | The above copyright notice and this permission notice shall be included in
42 | all copies or substantial portions of the Software.
43 |
44 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
50 | THE SOFTWARE.
51 |
52 | ## SDWebImage
53 |
54 | Copyright (c) 2009-2017 Olivier Poitrey rs@dailymotion.com
55 |
56 | Permission is hereby granted, free of charge, to any person obtaining a copy
57 | of this software and associated documentation files (the "Software"), to deal
58 | in the Software without restriction, including without limitation the rights
59 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
60 | copies of the Software, and to permit persons to whom the Software is furnished
61 | to do so, subject to the following conditions:
62 |
63 | The above copyright notice and this permission notice shall be included in all
64 | copies or substantial portions of the Software.
65 |
66 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
67 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
68 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
69 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
70 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
71 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
72 | THE SOFTWARE.
73 |
74 |
75 | Generated by CocoaPods - https://cocoapods.org
76 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-LiveDemo/Pods-LiveDemo-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_LiveDemo : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_LiveDemo
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-LiveDemo/Pods-LiveDemo.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage"
3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FDFullscreenPopGesture" -l"Masonry" -l"SDWebImage" -framework "Foundation" -framework "ImageIO" -framework "UIKit"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-LiveDemo/Pods-LiveDemo.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage"
3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FDFullscreenPopGesture" -l"Masonry" -l"SDWebImage" -framework "Foundation" -framework "ImageIO" -framework "UIKit"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_SDWebImage : NSObject
3 | @end
4 | @implementation PodsDummy_SDWebImage
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LiveDemo
2 | 抖音切换效果
3 | 直播赠送礼物机制
4 |
5 | 
6 |
--------------------------------------------------------------------------------