Commit 4bf957e8435795fb52d1f2f22bc6dff6c8610272
0 parents
防数字人民币首页demo
Showing
59 changed files
with
4004 additions
and
0 deletions
.gitignore
0 → 100644
| 1 | +++ a/.gitignore | ||
| 1 | +# macOS | ||
| 2 | +.DS_Store | ||
| 3 | + | ||
| 4 | +# Xcode | ||
| 5 | +build/ | ||
| 6 | +*.pbxuser | ||
| 7 | +!default.pbxuser | ||
| 8 | +*.mode1v3 | ||
| 9 | +!default.mode1v3 | ||
| 10 | +*.mode2v3 | ||
| 11 | +!default.mode2v3 | ||
| 12 | +*.perspectivev3 | ||
| 13 | +!default.perspectivev3 | ||
| 14 | +xcuserdata/ | ||
| 15 | +*.xccheckout | ||
| 16 | +*.moved-aside | ||
| 17 | +DerivedData | ||
| 18 | +*.hmap | ||
| 19 | +*.ipa | ||
| 20 | + | ||
| 21 | +# Bundler | ||
| 22 | +.bundle | ||
| 23 | + | ||
| 24 | +# Add this line if you want to avoid checking in source code from Carthage dependencies. | ||
| 25 | +# Carthage/Checkouts | ||
| 26 | + | ||
| 27 | +Carthage/Build | ||
| 28 | + | ||
| 29 | +# We recommend against adding the Pods directory to your .gitignore. However | ||
| 30 | +# you should judge for yourself, the pros and cons are mentioned at: | ||
| 31 | +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control | ||
| 32 | +# | ||
| 33 | +# Note: if you ignore the Pods directory, make sure to uncomment | ||
| 34 | +# `pod install` in .travis.yml | ||
| 35 | +# | ||
| 36 | +# Pods/ |
.travis.yml
0 → 100644
| 1 | +++ a/.travis.yml | ||
| 1 | +# references: | ||
| 2 | +# * https://www.objc.io/issues/6-build-tools/travis-ci/ | ||
| 3 | +# * https://github.com/supermarin/xcpretty#usage | ||
| 4 | + | ||
| 5 | +osx_image: xcode7.3 | ||
| 6 | +language: objective-c | ||
| 7 | +# cache: cocoapods | ||
| 8 | +# podfile: Example/Podfile | ||
| 9 | +# before_install: | ||
| 10 | +# - gem install cocoapods # Since Travis is not always on latest version | ||
| 11 | +# - pod install --project-directory=Example | ||
| 12 | +script: | ||
| 13 | +- set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/CNLiveDigitalRMBHomeDeom.xcworkspace -scheme CNLiveDigitalRMBHomeDeom-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty | ||
| 14 | +- pod lib lint |
CNLiveDigitalRMBHomeDeom.podspec
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom.podspec | ||
| 1 | +# | ||
| 2 | +# Be sure to run `pod lib lint CNLiveDigitalRMBHomeDeom.podspec' to ensure this is a | ||
| 3 | +# valid spec before submitting. | ||
| 4 | +# | ||
| 5 | +# Any lines starting with a # are optional, but their use is encouraged | ||
| 6 | +# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html | ||
| 7 | +# | ||
| 8 | + | ||
| 9 | +Pod::Spec.new do |s| | ||
| 10 | + s.name = 'CNLiveDigitalRMBHomeDeom' | ||
| 11 | + s.version = '0.1.0' | ||
| 12 | + s.summary = 'A short description of CNLiveDigitalRMBHomeDeom.' | ||
| 13 | + | ||
| 14 | +# This description is used to generate tags and improve search results. | ||
| 15 | +# * Think: What does it do? Why did you write it? What is the focus? | ||
| 16 | +# * Try to keep it short, snappy and to the point. | ||
| 17 | +# * Write the description between the DESC delimiters below. | ||
| 18 | +# * Finally, don't worry about the indent, CocoaPods strips it! | ||
| 19 | + | ||
| 20 | + s.description = <<-DESC | ||
| 21 | +TODO: Add long description of the pod here. | ||
| 22 | + DESC | ||
| 23 | + | ||
| 24 | + s.homepage = 'http://bj.gitlab.cnlive.com/ios-team/CNLiveDigitalRMBHomeDeom' | ||
| 25 | + # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' | ||
| 26 | + s.license = { :type => 'MIT', :file => 'LICENSE' } | ||
| 27 | + s.author = { 'daojian' => '1145717295@qq.com' } | ||
| 28 | + s.source = { :git => 'http://bj.gitlab.cnlive.com/ios-team/CNLiveDigitalRMBHomeDeom.git', :tag => s.version.to_s } | ||
| 29 | + # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' | ||
| 30 | + | ||
| 31 | + s.ios.deployment_target = '10.0' | ||
| 32 | + | ||
| 33 | + s.source_files = 'CNLiveDigitalRMBHomeDeom/Classes/**/*' | ||
| 34 | + | ||
| 35 | + s.resource_bundles = { | ||
| 36 | + 'CNLiveDigitalRMBHomeDeom' => ['CNLiveDigitalRMBHomeDeom/Assets/*'] | ||
| 37 | + } | ||
| 38 | + s.ios.deployment_target = '10.0' | ||
| 39 | + s.swift_version = '5.0' | ||
| 40 | + # s.public_header_files = 'Pod/Classes/**/*.h' | ||
| 41 | + # s.frameworks = 'UIKit', 'MapKit' | ||
| 42 | + # s.dependency 'AFNetworking', '~> 2.3' | ||
| 43 | + | ||
| 44 | + s.dependency 'CNLiveCommonCategory' | ||
| 45 | + s.dependency 'CNLiveNewTripartiteManagement/YYCategories' | ||
| 46 | + | ||
| 47 | +end |
CNLiveDigitalRMBHomeDeom/Assets/.gitkeep
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/.gitkeep |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/Contents.json
0 → 100644
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/backViewImage.imageset/4671683516653_.pic.jpg
0 → 100644
82.2 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/backViewImage.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/backViewImage.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "4671683516653_.pic.jpg", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/collectMoneyImage.imageset/4661683514280_.pic.jpg
0 → 100644
75 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/collectMoneyImage.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/collectMoneyImage.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "4661683514280_.pic.jpg", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/down.imageset/4491683252485_.pic.jpg
0 → 100644
5.25 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/down.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/down.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "4491683252485_.pic.jpg", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/mainView_front.imageset/4621683513846_.pic.jpg
0 → 100644
56.9 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/mainView_front.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/mainView_front.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "4621683513846_.pic.jpg", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/payMoneyImage.imageset/4651683514228_.pic.jpg
0 → 100644
52.1 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/payMoneyImage.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/payMoneyImage.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "4651683514228_.pic.jpg", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/zhongguorenming_bank.imageset/4431683250159_.pic.jpg
0 → 100644
79.4 KB
CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/zhongguorenming_bank.imageset/Contents.json
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/zhongguorenming_bank.imageset/Contents.json | ||
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "4431683250159_.pic.jpg", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
CNLiveDigitalRMBHomeDeom/Classes/.gitkeep
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/.gitkeep |
CNLiveDigitalRMBHomeDeom/Classes/Controller/CNLiveHomePageDigitalRMBViewController.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Controller/CNLiveHomePageDigitalRMBViewController.h | ||
| 1 | +// | ||
| 2 | +// CNLiveHomePageDigitalRMBViewController.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/4/26. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | + | ||
| 12 | +@interface CNLiveHomePageDigitalRMBViewController : UIViewController | ||
| 13 | + | ||
| 14 | +@end | ||
| 15 | + | ||
| 16 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/Controller/CNLiveHomePageDigitalRMBViewController.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Controller/CNLiveHomePageDigitalRMBViewController.m | ||
| 1 | +// | ||
| 2 | +// CNLiveHomePageDigitalRMBViewController.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/4/26. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNLiveHomePageDigitalRMBViewController.h" | ||
| 9 | +#import "NewPagedFlowView.h" | ||
| 10 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 11 | + | ||
| 12 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 13 | +#import<YYCategories/YYCategories.h> | ||
| 14 | + | ||
| 15 | +#define Width [UIScreen mainScreen].bounds.size.width | ||
| 16 | +#define Height [UIScreen mainScreen].bounds.size.height | ||
| 17 | + | ||
| 18 | +@interface CNLiveHomePageDigitalRMBViewController () | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * 图片数组 | ||
| 22 | + */ | ||
| 23 | +@property (nonatomic, strong) NSMutableArray *dataArray; | ||
| 24 | + | ||
| 25 | +@property (nonatomic, strong) NewPagedFlowView *pageFlowView; | ||
| 26 | +@end | ||
| 27 | + | ||
| 28 | +@implementation CNLiveHomePageDigitalRMBViewController | ||
| 29 | + | ||
| 30 | +- (void)viewDidLoad { | ||
| 31 | + [super viewDidLoad]; | ||
| 32 | + // Do any additional setup after loading the view. | ||
| 33 | + | ||
| 34 | + for (int index = 0; index < 2; index++) { | ||
| 35 | + [self.dataArray addObject:@""]; | ||
| 36 | + } | ||
| 37 | + [self setupUI]; | ||
| 38 | + | ||
| 39 | +// let maskPath = UIBezierPath.init(roundedRect: box, byRoundingCorners: [.topRight,.topLeft], cornerRadii: CGSizeMake(width: 6.0, height: 6.0)) | ||
| 40 | +// | ||
| 41 | +// let maskLayer = CAShapeLayer() | ||
| 42 | +// | ||
| 43 | +// maskLayer.frame = self.bgView.bounds | ||
| 44 | +// | ||
| 45 | +// maskLayer.path = maskPath.cgPath | ||
| 46 | +// | ||
| 47 | +// self.bgView.layer.mask = maskLayer | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + | ||
| 51 | + | ||
| 52 | +// CGFloat W = Width-100; | ||
| 53 | +// UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(50, 0, W,W/2)]; | ||
| 54 | +// topView.backgroundColor = [UIColor clearColor]; | ||
| 55 | +// [self.view addSubview:topView]; | ||
| 56 | +// | ||
| 57 | +// //画半圆 | ||
| 58 | +// UIBezierPath *circle = [UIBezierPath bezierPathWithArcCenter:CGPointMake(W/2, 0) radius:W/2 startAngle:0 endAngle:M_PI clockwise:YES]; | ||
| 59 | +// CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; | ||
| 60 | +// shapeLayer.path = circle.CGPath; | ||
| 61 | +// shapeLayer.fillColor = [UIColor greenColor].CGColor; | ||
| 62 | +// [topView.layer addSublayer:shapeLayer]; | ||
| 63 | +// | ||
| 64 | +// UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(50, Height -W/2 , W,W/2)]; | ||
| 65 | +// bottomView.backgroundColor = [UIColor clearColor]; | ||
| 66 | +// [self.view addSubview:bottomView]; | ||
| 67 | +// | ||
| 68 | +// UIBezierPath *bottomCircle = [UIBezierPath bezierPathWithArcCenter:CGPointMake(W/2, W/2) radius:W/2 startAngle:0 endAngle:M_PI clockwise:NO]; | ||
| 69 | +// CAShapeLayer *bottomShapeLayer = [[CAShapeLayer alloc] init]; | ||
| 70 | +// bottomShapeLayer.path = bottomCircle.CGPath; | ||
| 71 | +// bottomShapeLayer.fillColor = [UIColor greenColor].CGColor; | ||
| 72 | +// [bottomView.layer addSublayer:bottomShapeLayer]; | ||
| 73 | +// | ||
| 74 | +// UILabel *laber =[[UILabel alloc] initWithFrame:CGRectMake(100, 50, 100, 20)]; | ||
| 75 | +// laber.text = @"付钱"; | ||
| 76 | +// laber.textAlignment = NSTextAlignmentCenter; | ||
| 77 | +// [bottomView addSubview:laber]; | ||
| 78 | + | ||
| 79 | +} | ||
| 80 | +#pragma mark --push控制器 | ||
| 81 | +- (void)pushCustomVC { | ||
| 82 | + | ||
| 83 | + | ||
| 84 | +} | ||
| 85 | + | ||
| 86 | +- (void)setupUI { | ||
| 87 | + | ||
| 88 | + self.automaticallyAdjustsScrollViewInsets = NO; | ||
| 89 | + | ||
| 90 | +// NewPagedFlowView *pageFlowView = [[NewPagedFlowView alloc] initWithFrame:CGRectMake(0, 72, Width, Width * 9 / 16)]; | ||
| 91 | + NewPagedFlowView *pageFlowView = [[NewPagedFlowView alloc] initWithFrame:CGRectMake(0, 0, Width, Height)]; | ||
| 92 | + | ||
| 93 | + pageFlowView.delegate = self; | ||
| 94 | + pageFlowView.dataSource = self; | ||
| 95 | + pageFlowView.minimumPageAlpha = 0.1; | ||
| 96 | + pageFlowView.isCarousel = NO; | ||
| 97 | + pageFlowView.orientation = NewPagedFlowViewOrientationHorizontal; | ||
| 98 | + pageFlowView.leftRightMargin = 20; | ||
| 99 | + pageFlowView.isOpenAutoScroll = YES; | ||
| 100 | + | ||
| 101 | + //左右图片的距离顶部和底部的高度 | ||
| 102 | + pageFlowView.topBottomMargin = 0; | ||
| 103 | + | ||
| 104 | + | ||
| 105 | + [pageFlowView reloadData]; | ||
| 106 | + | ||
| 107 | + self.pageFlowView = pageFlowView; | ||
| 108 | + [self.view addSubview:pageFlowView]; | ||
| 109 | + | ||
| 110 | + | ||
| 111 | +} | ||
| 112 | + | ||
| 113 | + | ||
| 114 | +#pragma mark NewPagedFlowView Delegate | ||
| 115 | +- (void)didSelectCell:(UIView *)subView withSubViewIndex:(NSInteger)subIndex { | ||
| 116 | + | ||
| 117 | + NSLog(@"点击了第%ld张图",(long)subIndex + 1); | ||
| 118 | + | ||
| 119 | +} | ||
| 120 | + | ||
| 121 | +- (void)didScrollToPage:(NSInteger)pageNumber inFlowView:(NewPagedFlowView *)flowView { | ||
| 122 | + | ||
| 123 | + NSLog(@"ViewController 滚动到了第%ld页",pageNumber); | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +#pragma mark NewPagedFlowView Datasource | ||
| 127 | +- (NSInteger)numberOfPagesInFlowView:(NewPagedFlowView *)flowView { | ||
| 128 | + | ||
| 129 | + return self.dataArray.count; | ||
| 130 | + | ||
| 131 | +} | ||
| 132 | + | ||
| 133 | +- (PGIndexBannerSubiew *)flowView:(NewPagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index{ | ||
| 134 | + PGIndexBannerSubiew *bannerView = [flowView dequeueReusableCell]; | ||
| 135 | + if (!bannerView) { | ||
| 136 | + bannerView = [[PGIndexBannerSubiew alloc] initWithFrame:CGRectMake(0, 0, Width-50, Height)]; | ||
| 137 | + bannerView.tag = index + 100; | ||
| 138 | + bannerView.layer.cornerRadius = 4; | ||
| 139 | + bannerView.layer.masksToBounds = NO; | ||
| 140 | + } | ||
| 141 | + bannerView.superScrollView = flowView.scrollView; | ||
| 142 | + bannerView.associatedVCView = self.view; | ||
| 143 | + return bannerView; | ||
| 144 | + | ||
| 145 | + | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +- (CGSize)sizeForPageInFlowView:(NewPagedFlowView *)flowView { | ||
| 149 | + return CGSizeMake(Width-50,Height); | ||
| 150 | +} | ||
| 151 | +#pragma mark --懒加载 | ||
| 152 | +- (NSMutableArray *)dataArray { | ||
| 153 | + if (_dataArray == nil) { | ||
| 154 | + _dataArray = [NSMutableArray array]; | ||
| 155 | + } | ||
| 156 | + return _dataArray; | ||
| 157 | +} | ||
| 158 | +/* | ||
| 159 | +#pragma mark - Navigation | ||
| 160 | + | ||
| 161 | +// In a storyboard-based application, you will often want to do a little preparation before navigation | ||
| 162 | +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { | ||
| 163 | + // Get the new view controller using [segue destinationViewController]. | ||
| 164 | + // Pass the selected object to the new view controller. | ||
| 165 | +} | ||
| 166 | +*/ | ||
| 167 | + | ||
| 168 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/Help/CNLiveDigitalRMBHelp.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Help/CNLiveDigitalRMBHelp.h | ||
| 1 | +// | ||
| 2 | +// CNLiveDigitalRMBHelp.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom-CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <Foundation/Foundation.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | + | ||
| 12 | +@interface CNLiveDigitalRMBHelp : NSObject | ||
| 13 | ++ (UIImage *)getHomeManagerBunddleImageWithName:(NSString *)imageName; | ||
| 14 | +@end | ||
| 15 | + | ||
| 16 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/Help/CNLiveDigitalRMBHelp.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Help/CNLiveDigitalRMBHelp.m | ||
| 1 | +// | ||
| 2 | +// CNLiveDigitalRMBHelp.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom-CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 9 | + | ||
| 10 | +@implementation CNLiveDigitalRMBHelp | ||
| 11 | ++ (UIImage *)getHomeManagerBunddleImageWithName:(NSString *)imageName | ||
| 12 | +{ | ||
| 13 | + NSBundle *bundle = [NSBundle bundleForClass:[CNLiveDigitalRMBHelp class]]; | ||
| 14 | + NSURL *url = [bundle URLForResource:@"CNLiveDigitalRMBHomeDeom.bundle" withExtension:@""]; | ||
| 15 | + if (!url) { | ||
| 16 | + return [UIImage new]; | ||
| 17 | + } | ||
| 18 | + NSBundle *targetBundle = [NSBundle bundleWithURL:url]; | ||
| 19 | + return [UIImage imageNamed:imageName inBundle:targetBundle compatibleWithTraitCollection:NULL]; | ||
| 20 | +} | ||
| 21 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/Help/WJColorChange.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Help/WJColorChange.h | ||
| 1 | +// | ||
| 2 | +// WJColorChange.h | ||
| 3 | +// ColorChange | ||
| 4 | +// | ||
| 5 | +// Created by wangjin on 2018/8/30. | ||
| 6 | +// Copyright © 2018年 ELah. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import <UIKit/UIKit.h> | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +@protocol WJColorChangeDelegate <NSObject> | ||
| 13 | + | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + 滚动时候回调 传出当前的滚动视图 | ||
| 17 | + | ||
| 18 | + @param scrollView 滚动视图 | ||
| 19 | + */ | ||
| 20 | +- (void)WJColorScrollViewScroll:(UIScrollView *)scrollView; | ||
| 21 | + | ||
| 22 | + | ||
| 23 | +/** | ||
| 24 | + 滚动结束时候回调 | ||
| 25 | + | ||
| 26 | + @param scrollView 滚动视图 | ||
| 27 | + */ | ||
| 28 | +- (void)WJColorEndScroll:(UIScrollView *)scrollView; | ||
| 29 | + | ||
| 30 | +@end | ||
| 31 | + | ||
| 32 | +typedef enum : NSUInteger { | ||
| 33 | + SingleColor,//背景单色 | ||
| 34 | + TransverseGradientColor, // 背景横向渐变色 | ||
| 35 | +} ColorType; | ||
| 36 | + | ||
| 37 | +@interface WJColorChange : NSObject | ||
| 38 | + | ||
| 39 | + | ||
| 40 | +/** | ||
| 41 | + 初始化对象 | ||
| 42 | + | ||
| 43 | + @param colorType 颜色类型设置 | ||
| 44 | + @return 返回对象实体 | ||
| 45 | + */ | ||
| 46 | +- (instancetype)initWithType:(ColorType)colorType; | ||
| 47 | + | ||
| 48 | +/** | ||
| 49 | + 设置颜色的方法 单色背景 | ||
| 50 | + | ||
| 51 | + @param scrollView 滚动的视图 | ||
| 52 | + @param colorArray 颜色数组 | ||
| 53 | + @param changeView 需要颜色变化的View | ||
| 54 | + */ | ||
| 55 | +- (void)settingScrollView:(UIScrollView*)scrollView colorArray:(NSArray<UIColor *>*)colorArray needChangeColorView:(UIView *)changeView; | ||
| 56 | + | ||
| 57 | + | ||
| 58 | +/** | ||
| 59 | + 设置颜色的方法 渐变背景 | ||
| 60 | + | ||
| 61 | + @param scrollView 滚动的视图 | ||
| 62 | + @param colorArray 渐变颜色数组 | ||
| 63 | + @param changeView 需要变化的View --- 这里不能与滚动视图同对象 | ||
| 64 | + */ | ||
| 65 | +- (void)settingArrayScrollView:(UIScrollView*)scrollView colorArray:(NSArray<NSArray*>*)colorArray needChangeColorView:(UIView *)changeView; | ||
| 66 | + | ||
| 67 | + | ||
| 68 | +/** | ||
| 69 | + 颜色类型 | ||
| 70 | + */ | ||
| 71 | +@property (nonatomic,assign) ColorType colorType; | ||
| 72 | + | ||
| 73 | +@property (nonatomic,assign) id<WJColorChangeDelegate> delegate; | ||
| 74 | + | ||
| 75 | +///UIScrollView 滑动超过多少距离后, 颜色才发生变化, 默认为0, 触发滑动就立即改变颜色 | ||
| 76 | +@property (nonatomic,assign) CGFloat offset; | ||
| 77 | + | ||
| 78 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/Help/WJColorChange.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/Help/WJColorChange.m | ||
| 1 | +// | ||
| 2 | +// WJColorChange.m | ||
| 3 | +// ColorChange | ||
| 4 | +// | ||
| 5 | +// Created by wangjin on 2018/8/30. | ||
| 6 | +// Copyright © 2018年 ELah. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +// 增加了 横向渐变的效果 添加了 类型设置 | ||
| 10 | + | ||
| 11 | +#import "WJColorChange.h" | ||
| 12 | + | ||
| 13 | +@interface WJColorChange ()<UIScrollViewDelegate> | ||
| 14 | + | ||
| 15 | + | ||
| 16 | +/// 单颜色视图下的背景色 | ||
| 17 | +/// 开始颜色, 取值范围 0~1 | ||
| 18 | +@property (nonatomic, assign) CGFloat startR; | ||
| 19 | +@property (nonatomic, assign) CGFloat startG; | ||
| 20 | +@property (nonatomic, assign) CGFloat startB; | ||
| 21 | +/// 完成颜色, 取值范围 0~1 | ||
| 22 | +@property (nonatomic, assign) CGFloat endR; | ||
| 23 | +@property (nonatomic, assign) CGFloat endG; | ||
| 24 | +@property (nonatomic, assign) CGFloat endB; | ||
| 25 | + | ||
| 26 | + | ||
| 27 | +/// 渐变颜色视图下的背景色 | ||
| 28 | +/// 第一部分开始颜色 | ||
| 29 | +@property (nonatomic, assign) CGFloat firstStartR; | ||
| 30 | +@property (nonatomic, assign) CGFloat firstStartG; | ||
| 31 | +@property (nonatomic, assign) CGFloat firstStartB; | ||
| 32 | + | ||
| 33 | +/// 第二部分开始颜色 | ||
| 34 | + | ||
| 35 | +@property (nonatomic, assign) CGFloat secondStartR; | ||
| 36 | +@property (nonatomic, assign) CGFloat secondStartG; | ||
| 37 | +@property (nonatomic, assign) CGFloat secondStartB; | ||
| 38 | + | ||
| 39 | +/// 第一部分结束颜色 | ||
| 40 | +@property (nonatomic, assign) CGFloat firstEndR; | ||
| 41 | +@property (nonatomic, assign) CGFloat firstEndG; | ||
| 42 | +@property (nonatomic, assign) CGFloat firstEndB; | ||
| 43 | + | ||
| 44 | +/// 第二部分结束颜色 | ||
| 45 | +@property (nonatomic, assign) CGFloat secondEndR; | ||
| 46 | +@property (nonatomic, assign) CGFloat secondEndG; | ||
| 47 | +@property (nonatomic, assign) CGFloat secondEndB; | ||
| 48 | + | ||
| 49 | +/// 记录刚开始时的偏移量 | ||
| 50 | +@property (nonatomic, assign) NSInteger startOffsetY; | ||
| 51 | +@property (nonatomic,strong) UIScrollView *yourScrollView; | ||
| 52 | + | ||
| 53 | +//颜色数组 外面传进来的 | ||
| 54 | +@property (nonatomic,strong) NSArray *colorArray; | ||
| 55 | +//需要变化的背景视图 | ||
| 56 | +@property (nonatomic,strong) UIView *needChangeView; | ||
| 57 | +//渐变图层 | ||
| 58 | +@property (nonatomic,strong) CAGradientLayer *gradientLayer; | ||
| 59 | + | ||
| 60 | +@end | ||
| 61 | + | ||
| 62 | +@implementation WJColorChange | ||
| 63 | + | ||
| 64 | +#pragma mark - PublicMethod | ||
| 65 | + | ||
| 66 | +- (instancetype)initWithType:(ColorType)colorType { | ||
| 67 | + | ||
| 68 | + if (self = [super init]) { | ||
| 69 | + self.colorType = colorType; | ||
| 70 | + } | ||
| 71 | + return self; | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +- (void)settingScrollView:(UIScrollView*)scrollView colorArray:(NSArray<UIColor *>*)colorArray needChangeColorView:(UIView *)changeView{ | ||
| 75 | + | ||
| 76 | + if (!scrollView) return; | ||
| 77 | + if (!colorArray) return; | ||
| 78 | + | ||
| 79 | + self.yourScrollView = scrollView; | ||
| 80 | + self.needChangeView = changeView; | ||
| 81 | + self.colorArray = colorArray; | ||
| 82 | + | ||
| 83 | + scrollView.delegate = self; | ||
| 84 | +} | ||
| 85 | + | ||
| 86 | +- (void)settingArrayScrollView:(UIScrollView*)scrollView colorArray:(NSArray<NSArray*>*)colorArray needChangeColorView:(UIView *)changeView { | ||
| 87 | + | ||
| 88 | + if (!scrollView) return; | ||
| 89 | + if (!colorArray) return; | ||
| 90 | + | ||
| 91 | + self.yourScrollView = scrollView; | ||
| 92 | + self.needChangeView = changeView; | ||
| 93 | + self.colorArray = colorArray; | ||
| 94 | + scrollView.delegate = self; | ||
| 95 | + | ||
| 96 | + NSArray *firstArray = colorArray.firstObject; | ||
| 97 | + //默认赋值 | ||
| 98 | + [self settingGradientLayerWithStartColor:firstArray[0] endColor:firstArray[1] bgView:changeView]; | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | + | ||
| 102 | + | ||
| 103 | +#pragma mark - PrivateMethod | ||
| 104 | +- (void)settingWithStartColor:(UIColor *)startColor endColor:(UIColor *)endColor { | ||
| 105 | + | ||
| 106 | + [self setupStartColor:startColor]; | ||
| 107 | + [self setupEndColor:endColor]; | ||
| 108 | +} | ||
| 109 | + | ||
| 110 | + | ||
| 111 | +- (void)settingTransverGradientWithFirstStartColor:(UIColor *)firstStartColor firstEndColor:(UIColor *)firstEndColor secondStartColor:(UIColor *)secondStartColor secondEndColor:(UIColor *)secondEndColor { | ||
| 112 | + | ||
| 113 | + [self setupFirstStartColor:firstStartColor]; | ||
| 114 | + [self setupFirstEndColor:firstEndColor]; | ||
| 115 | + | ||
| 116 | + [self setupSecondStartColor:secondStartColor]; | ||
| 117 | + [self setupSecondEndColor:secondEndColor]; | ||
| 118 | + | ||
| 119 | +} | ||
| 120 | + | ||
| 121 | + | ||
| 122 | +#pragma mark - - - UIScrollViewDelegate | ||
| 123 | +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView | ||
| 124 | +{ | ||
| 125 | + _startOffsetY = scrollView.contentOffset.y; | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { | ||
| 129 | + | ||
| 130 | + | ||
| 131 | + if ([self.delegate respondsToSelector:@selector(WJColorScrollViewScroll:)]) { | ||
| 132 | + | ||
| 133 | + [self.delegate WJColorScrollViewScroll:scrollView]; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + // 1、定义获取需要的数据 | ||
| 137 | + CGFloat progress = 0; | ||
| 138 | + NSInteger originalIndex = 0; | ||
| 139 | + NSInteger targetIndex = 0; | ||
| 140 | + // 2、判断是上滑还是下滑 | ||
| 141 | + CGFloat currentOffsetY = scrollView.contentOffset.y; | ||
| 142 | + CGFloat scrollViewH = scrollView.bounds.size.height; | ||
| 143 | + | ||
| 144 | + if (currentOffsetY > _startOffsetY) { // 上滑 | ||
| 145 | + | ||
| 146 | + /**控制滑动中间的view,不立马进行颜色变化,超过_offset后再变化*/ | ||
| 147 | + scrollViewH += _offset; | ||
| 148 | + if (currentOffsetY < scrollViewH && _startOffsetY==scrollView.bounds.size.height) { | ||
| 149 | + return; | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + // 1、计算 progress | ||
| 153 | + progress = currentOffsetY / scrollViewH - floor(currentOffsetY / scrollViewH); | ||
| 154 | + // 2、计算 originalIndex | ||
| 155 | + originalIndex = currentOffsetY / scrollViewH; | ||
| 156 | + // 3、计算 targetIndex | ||
| 157 | + targetIndex = originalIndex + 1; | ||
| 158 | + if (targetIndex >= self.colorArray.count) { | ||
| 159 | + targetIndex = self.colorArray.count - 1; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + | ||
| 163 | + } else { // 下滑 | ||
| 164 | + | ||
| 165 | + /**控制滑动中间的view,不立马进行颜色变化,超过_offset后再变化*/ | ||
| 166 | + scrollViewH -= _offset; | ||
| 167 | + if (currentOffsetY > scrollViewH && _startOffsetY==scrollView.bounds.size.height) { | ||
| 168 | + return; | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + // 1、计算 progress | ||
| 172 | + progress = 1 - (currentOffsetY / scrollViewH - floor(currentOffsetY / scrollViewH)); | ||
| 173 | + // 2、计算 targetIndex | ||
| 174 | + targetIndex = currentOffsetY / scrollViewH; | ||
| 175 | + // 3、计算 originalIndex | ||
| 176 | + originalIndex = targetIndex + 1; | ||
| 177 | + if (originalIndex >= self.colorArray.count) { | ||
| 178 | + originalIndex = self.colorArray.count - 1; | ||
| 179 | + } | ||
| 180 | + } | ||
| 181 | + | ||
| 182 | + //3.如果在第一个 不进行颜色改变 | ||
| 183 | + if (currentOffsetY <=0) { | ||
| 184 | + return; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + if (self.colorType == SingleColor) { | ||
| 188 | + [self settingWithStartColor:self.colorArray[originalIndex] endColor:self.colorArray[targetIndex]]; | ||
| 189 | + [self changeBgViewGradientEffectWithProgress:progress bgView:self.needChangeView]; | ||
| 190 | + }else { | ||
| 191 | + | ||
| 192 | + NSArray *originalArray = self.colorArray[originalIndex]; | ||
| 193 | + NSArray *targetArray = self.colorArray[targetIndex]; | ||
| 194 | + [self settingTransverGradientWithFirstStartColor:originalArray[0] firstEndColor:targetArray[0] secondStartColor:originalArray[1] secondEndColor:targetArray[1]]; | ||
| 195 | + [self changeTransverseViewGradientEffectWithProgress:progress bgView:self.needChangeView]; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | +} | ||
| 199 | + | ||
| 200 | +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { | ||
| 201 | + | ||
| 202 | + if ([self.delegate respondsToSelector:@selector(WJColorEndScroll:)]) { | ||
| 203 | + [self.delegate WJColorEndScroll:scrollView]; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + CGFloat currentOffsetY = scrollView.contentOffset.y; | ||
| 207 | + CGFloat scrollViewH = scrollView.bounds.size.height; | ||
| 208 | + NSInteger index = currentOffsetY / scrollViewH; | ||
| 209 | + self.needChangeView.backgroundColor = self.colorArray[index]; | ||
| 210 | + | ||
| 211 | +} | ||
| 212 | + | ||
| 213 | +#pragma mark - - - 颜色渐变方法抽取 | ||
| 214 | +- (void)changeBgViewGradientEffectWithProgress:(CGFloat)progress bgView:(UIView *)bgView { | ||
| 215 | + | ||
| 216 | + CGFloat r = self.endR - self.startR; | ||
| 217 | + CGFloat g = self.endG - self.startG; | ||
| 218 | + CGFloat b = self.endB - self.startB; | ||
| 219 | + | ||
| 220 | + UIColor *changingColor = [UIColor colorWithRed:self.startR + r * progress green:self.startG + g * progress blue:self.startB + b * progress alpha:1.0]; | ||
| 221 | + bgView.backgroundColor = changingColor; | ||
| 222 | +} | ||
| 223 | + | ||
| 224 | +- (void)changeTransverseViewGradientEffectWithProgress:(CGFloat)progress bgView:(UIView *)bgView { | ||
| 225 | + | ||
| 226 | + CGFloat fr = self.firstEndR - self.firstStartR; | ||
| 227 | + CGFloat fg = self.firstEndG - self.firstStartG; | ||
| 228 | + CGFloat fb = self.firstEndB - self.firstStartB; | ||
| 229 | + | ||
| 230 | + CGFloat sr = self.secondEndR - self.secondStartR; | ||
| 231 | + CGFloat sg = self.secondEndG - self.secondStartG; | ||
| 232 | + CGFloat sb = self.secondEndB - self.secondStartB; | ||
| 233 | + | ||
| 234 | + UIColor *fChangingColor = [UIColor colorWithRed:self.firstStartR + fr * progress green:self.firstStartG + fg * progress blue:self.firstStartB + fb * progress alpha:1.0]; | ||
| 235 | + UIColor *sChangingColor = [UIColor colorWithRed:self.secondStartR + sr * progress green:self.secondStartG + sg * progress blue:self.secondStartB + sb * progress alpha:1.0]; | ||
| 236 | + | ||
| 237 | + [self settingGradientLayerWithStartColor:fChangingColor endColor:sChangingColor bgView:bgView]; | ||
| 238 | +} | ||
| 239 | + | ||
| 240 | + | ||
| 241 | +/** | ||
| 242 | + 设置图层的横向渐变 | ||
| 243 | + | ||
| 244 | + @param startColor 开始色 | ||
| 245 | + @param endColor 结束色 | ||
| 246 | + @param bgView 背景视图 | ||
| 247 | + */ | ||
| 248 | +- (void)settingGradientLayerWithStartColor:(UIColor *)startColor endColor:(UIColor *)endColor bgView:(UIView *)bgView{ | ||
| 249 | + //横向渐变的路径 | ||
| 250 | + self.gradientLayer.colors = @[(__bridge id)startColor.CGColor, (__bridge id)endColor.CGColor];//这里颜色渐变 | ||
| 251 | + self.gradientLayer.locations = @[@0.0, @1.0];//颜色位置 | ||
| 252 | + self.gradientLayer.startPoint = CGPointMake(0, 0); | ||
| 253 | + self.gradientLayer.endPoint = CGPointMake(1.0, 0); | ||
| 254 | + self.gradientLayer.frame = bgView.bounds; | ||
| 255 | + [bgView.layer addSublayer:self.gradientLayer]; | ||
| 256 | + [bgView.layer insertSublayer:self.gradientLayer atIndex:0]; | ||
| 257 | +} | ||
| 258 | + | ||
| 259 | +#pragma mark - - - 颜色设置的计算 | ||
| 260 | + | ||
| 261 | + | ||
| 262 | +/** | ||
| 263 | + 开始颜色设置 | ||
| 264 | + | ||
| 265 | + @param color 开始颜色 | ||
| 266 | + */ | ||
| 267 | +- (void)setupStartColor:(UIColor *)color { | ||
| 268 | + | ||
| 269 | + CGFloat components[3]; | ||
| 270 | + [self getRGBComponents:components forColor:color]; | ||
| 271 | + self.startR = components[0]; | ||
| 272 | + self.startG = components[1]; | ||
| 273 | + self.startB = components[2]; | ||
| 274 | +} | ||
| 275 | + | ||
| 276 | +/** | ||
| 277 | + 结束颜色设置 | ||
| 278 | + | ||
| 279 | + @param color 结束颜色 | ||
| 280 | + */ | ||
| 281 | +- (void)setupEndColor:(UIColor *)color { | ||
| 282 | + | ||
| 283 | + CGFloat components[3]; | ||
| 284 | + [self getRGBComponents:components forColor:color]; | ||
| 285 | + self.endR = components[0]; | ||
| 286 | + self.endG = components[1]; | ||
| 287 | + self.endB = components[2]; | ||
| 288 | +} | ||
| 289 | + | ||
| 290 | +- (void)setupFirstStartColor:(UIColor *)color { | ||
| 291 | + | ||
| 292 | + CGFloat components[3]; | ||
| 293 | + [self getRGBComponents:components forColor:color]; | ||
| 294 | + self.firstStartR = components[0]; | ||
| 295 | + self.firstStartG = components[1]; | ||
| 296 | + self.firstStartB = components[2]; | ||
| 297 | +} | ||
| 298 | + | ||
| 299 | + | ||
| 300 | +- (void)setupFirstEndColor:(UIColor *)color { | ||
| 301 | + | ||
| 302 | + CGFloat components[3]; | ||
| 303 | + [self getRGBComponents:components forColor:color]; | ||
| 304 | + self.firstEndR = components[0]; | ||
| 305 | + self.firstEndG = components[1]; | ||
| 306 | + self.firstEndB = components[2]; | ||
| 307 | +} | ||
| 308 | + | ||
| 309 | +- (void)setupSecondStartColor:(UIColor *)color { | ||
| 310 | + CGFloat components[3]; | ||
| 311 | + [self getRGBComponents:components forColor:color]; | ||
| 312 | + self.secondStartR = components[0]; | ||
| 313 | + self.secondStartG = components[1]; | ||
| 314 | + self.secondStartB = components[2]; | ||
| 315 | + | ||
| 316 | +} | ||
| 317 | + | ||
| 318 | +- (void)setupSecondEndColor:(UIColor *)color { | ||
| 319 | + | ||
| 320 | + CGFloat components[3]; | ||
| 321 | + [self getRGBComponents:components forColor:color]; | ||
| 322 | + self.secondEndR = components[0]; | ||
| 323 | + self.secondEndG = components[1]; | ||
| 324 | + self.secondEndB = components[2]; | ||
| 325 | +} | ||
| 326 | + | ||
| 327 | +/** | ||
| 328 | + * 指定颜色,获取颜色的RGB值 | ||
| 329 | + * | ||
| 330 | + * @param components RGB数组 | ||
| 331 | + * @param color 颜色 | ||
| 332 | + */ | ||
| 333 | +- (void)getRGBComponents:(CGFloat [3])components forColor:(UIColor *)color { | ||
| 334 | + | ||
| 335 | + CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); | ||
| 336 | + unsigned char resultingPixel[4]; | ||
| 337 | + CGContextRef context = CGBitmapContextCreate(&resultingPixel, 1, 1, 8, 4, rgbColorSpace, 1); | ||
| 338 | + CGContextSetFillColorWithColor(context, [color CGColor]); | ||
| 339 | + CGContextFillRect(context, CGRectMake(0, 0, 1, 1)); | ||
| 340 | + CGContextRelease(context); | ||
| 341 | + CGColorSpaceRelease(rgbColorSpace); | ||
| 342 | + for (int component = 0; component < 3; component++) { | ||
| 343 | + components[component] = resultingPixel[component] / 255.0f; | ||
| 344 | + } | ||
| 345 | +} | ||
| 346 | + | ||
| 347 | +#pragma mark -- set/get | ||
| 348 | +- (CAGradientLayer *)gradientLayer { | ||
| 349 | + | ||
| 350 | + if (!_gradientLayer) { | ||
| 351 | + _gradientLayer = [CAGradientLayer layer]; | ||
| 352 | + } | ||
| 353 | + return _gradientLayer; | ||
| 354 | +} | ||
| 355 | +@end | ||
| 356 | + |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNBottomPayMoneyRemindView.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNBottomPayMoneyRemindView.h | ||
| 1 | +// | ||
| 2 | +// CNBottomPayMoneyRemindView.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/6. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | + | ||
| 12 | +/// 底部付钱上拉显示提醒View | ||
| 13 | +@interface CNBottomPayMoneyRemindView : UIView | ||
| 14 | + | ||
| 15 | +@end | ||
| 16 | + | ||
| 17 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNBottomPayMoneyRemindView.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNBottomPayMoneyRemindView.m | ||
| 1 | +// | ||
| 2 | +// CNBottomPayMoneyRemindView.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/6. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNBottomPayMoneyRemindView.h" | ||
| 9 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 10 | + | ||
| 11 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 12 | +#import<YYCategories/YYCategories.h> | ||
| 13 | + | ||
| 14 | +@interface CNBottomPayMoneyRemindView() | ||
| 15 | + | ||
| 16 | +@end | ||
| 17 | + | ||
| 18 | +@implementation CNBottomPayMoneyRemindView | ||
| 19 | + | ||
| 20 | +/* | ||
| 21 | +// Only override drawRect: if you perform custom drawing. | ||
| 22 | +// An empty implementation adversely affects performance during animation. | ||
| 23 | +- (void)drawRect:(CGRect)rect { | ||
| 24 | + // Drawing code | ||
| 25 | +} | ||
| 26 | +*/ | ||
| 27 | + | ||
| 28 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 29 | +{ | ||
| 30 | + self = [super initWithFrame:frame]; | ||
| 31 | + if (self) { | ||
| 32 | + [self initUI]; | ||
| 33 | + } | ||
| 34 | + return self; | ||
| 35 | +} | ||
| 36 | +- (void)initUI | ||
| 37 | +{ | ||
| 38 | + | ||
| 39 | + CGFloat W = kScreenWidth - 100; | ||
| 40 | + UIBezierPath *bottomCircle = [UIBezierPath bezierPathWithArcCenter:CGPointMake(W/2, W/2) radius:W/2 startAngle:0 endAngle:M_PI clockwise:NO]; | ||
| 41 | + CAShapeLayer *bottomShapeLayer = [[CAShapeLayer alloc] init]; | ||
| 42 | + bottomShapeLayer.path = bottomCircle.CGPath; | ||
| 43 | + bottomShapeLayer.fillColor = CNLiveColorWithHexString(@"#FCE0E0").CGColor; | ||
| 44 | + [self.layer addSublayer:bottomShapeLayer]; | ||
| 45 | + | ||
| 46 | + UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom]; | ||
| 47 | + btn.frame = CGRectMake((self.width-50)/2, 20, 50, 50); | ||
| 48 | + [btn setTitle:@"付钱" forState:UIControlStateNormal]; | ||
| 49 | + [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; | ||
| 50 | + btn.titleLabel.font = [UIFont systemFontOfSize:17]; | ||
| 51 | + btn.userInteractionEnabled = NO; | ||
| 52 | + [self addSubview:btn]; | ||
| 53 | +} | ||
| 54 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNCollectMoneyCodeView.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNCollectMoneyCodeView.h | ||
| 1 | +// | ||
| 2 | +// CNCollectMoneyCodeView.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | +///收钱码 | ||
| 12 | +@interface CNCollectMoneyCodeView : UIView | ||
| 13 | + | ||
| 14 | +@property (nonatomic, strong)UIView *contentView; | ||
| 15 | +@property (nonatomic, strong)UIView *topView; | ||
| 16 | + | ||
| 17 | + | ||
| 18 | +@end | ||
| 19 | + | ||
| 20 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNCollectMoneyCodeView.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNCollectMoneyCodeView.m | ||
| 1 | +// | ||
| 2 | +// CNCollectMoneyCodeView.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNCollectMoneyCodeView.h" | ||
| 9 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 10 | + | ||
| 11 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 12 | +#import<YYCategories/YYCategories.h> | ||
| 13 | + | ||
| 14 | +@interface CNCollectMoneyCodeView() | ||
| 15 | + | ||
| 16 | +@end | ||
| 17 | + | ||
| 18 | +@implementation CNCollectMoneyCodeView | ||
| 19 | + | ||
| 20 | +/* | ||
| 21 | +// Only override drawRect: if you perform custom drawing. | ||
| 22 | +// An empty implementation adversely affects performance during animation. | ||
| 23 | +- (void)drawRect:(CGRect)rect { | ||
| 24 | + // Drawing code | ||
| 25 | +} | ||
| 26 | +*/ | ||
| 27 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 28 | +{ | ||
| 29 | + self = [super initWithFrame:frame]; | ||
| 30 | + if (self) { | ||
| 31 | +// self.backgroundColor = [UIColor grayColor]; | ||
| 32 | + [self initUI]; | ||
| 33 | + } | ||
| 34 | + return self; | ||
| 35 | +} | ||
| 36 | +#pragma mark - 初始化UI | ||
| 37 | +- (void)initUI | ||
| 38 | +{ | ||
| 39 | + [self addSubview:self.contentView]; | ||
| 40 | + [self addSubview:self.topView]; | ||
| 41 | +} | ||
| 42 | +#pragma mark - Lazy | ||
| 43 | +- (UIView *)topView | ||
| 44 | +{ | ||
| 45 | + if (_topView == nil) { | ||
| 46 | + _topView = [[UIView alloc] initWithFrame:CGRectMake(0, 20, self.frame.size.width - 50, 70)]; | ||
| 47 | + | ||
| 48 | + } | ||
| 49 | + return _topView; | ||
| 50 | +} | ||
| 51 | +- (UIView *)contentView | ||
| 52 | +{ | ||
| 53 | + if (_contentView == nil) { | ||
| 54 | + _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height - 150)]; | ||
| 55 | + _contentView.backgroundColor = [UIColor whiteColor]; | ||
| 56 | + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:_contentView.bounds byRoundingCorners:UIRectCornerBottomRight | UIRectCornerBottomLeft cornerRadii:CGSizeMake(20, 20)]; | ||
| 57 | + CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; | ||
| 58 | + maskLayer.frame = _contentView.bounds; | ||
| 59 | + maskLayer.path = path.CGPath; | ||
| 60 | + _contentView.layer.mask = maskLayer; | ||
| 61 | + | ||
| 62 | + UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, _contentView.width-20, _contentView.height-40)]; | ||
| 63 | + imageview.image = [CNLiveDigitalRMBHelp getHomeManagerBunddleImageWithName:@"collectMoneyImage"]; | ||
| 64 | + [_contentView addSubview:imageview]; | ||
| 65 | + } | ||
| 66 | + return _contentView; | ||
| 67 | +} | ||
| 68 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNMainView.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNMainView.h | ||
| 1 | +// | ||
| 2 | +// CNMainView.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | +///主view | ||
| 12 | +@interface CNMainView : UIView | ||
| 13 | + | ||
| 14 | +- (void)scaledView:(CGFloat)scale; | ||
| 15 | + | ||
| 16 | +@end | ||
| 17 | + | ||
| 18 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNMainView.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNMainView.m | ||
| 1 | +// | ||
| 2 | +// CNMainView.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNMainView.h" | ||
| 9 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 10 | + | ||
| 11 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 12 | +#import<YYCategories/YYCategories.h> | ||
| 13 | + | ||
| 14 | +///正面View | ||
| 15 | +@interface CNFrontMainView : UIView | ||
| 16 | + | ||
| 17 | +@property (nonatomic, strong)UIImageView *imageView; | ||
| 18 | +@property (nonatomic, strong)UIView *contentView; | ||
| 19 | +@property (nonatomic, strong)UIButton *walletBtn; | ||
| 20 | +@property (nonatomic, strong)UILabel *walletRMBLabel; | ||
| 21 | + | ||
| 22 | +///点击反转事件 | ||
| 23 | +@property (nonatomic, copy) void(^tapTransformAciton)(void); | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +@end | ||
| 27 | + | ||
| 28 | +@implementation CNFrontMainView | ||
| 29 | + | ||
| 30 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 31 | +{ | ||
| 32 | + self = [super initWithFrame:frame]; | ||
| 33 | + if (self) { | ||
| 34 | + | ||
| 35 | + [self initUI]; | ||
| 36 | + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)]; | ||
| 37 | + [self addGestureRecognizer:tap]; | ||
| 38 | + | ||
| 39 | + } | ||
| 40 | + return self; | ||
| 41 | +} | ||
| 42 | +- (void)initUI | ||
| 43 | +{ | ||
| 44 | + self.clipsToBounds = YES; | ||
| 45 | + self.layer.cornerRadius = 20; | ||
| 46 | + [self addSubview:self.imageView]; | ||
| 47 | + [self addSubview:self.contentView]; | ||
| 48 | +} | ||
| 49 | +#pragma mark - 事件 | ||
| 50 | +- (void)tapAction | ||
| 51 | +{ | ||
| 52 | + if (self.tapTransformAciton) { | ||
| 53 | + self.tapTransformAciton(); | ||
| 54 | + } | ||
| 55 | +} | ||
| 56 | +#pragma mark - Lazy | ||
| 57 | +-(UIImageView *)imageView | ||
| 58 | +{ | ||
| 59 | + if (_imageView == nil) { | ||
| 60 | + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.width*0.7)]; | ||
| 61 | + _imageView.image = [CNLiveDigitalRMBHelp getHomeManagerBunddleImageWithName:@"zhongguorenming_bank"]; | ||
| 62 | + | ||
| 63 | + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:_imageView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(20, 20)]; | ||
| 64 | + CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; | ||
| 65 | + maskLayer.frame = _imageView.bounds; | ||
| 66 | + maskLayer.path = path.CGPath; | ||
| 67 | + _imageView.layer.mask = maskLayer; | ||
| 68 | + } | ||
| 69 | + return _imageView; | ||
| 70 | +} | ||
| 71 | +- (UIView *)contentView | ||
| 72 | +{ | ||
| 73 | + if (_contentView == nil) { | ||
| 74 | + _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, self.imageView.bottom - 20, self.width, self.height-self.imageView.bottom + 20)]; | ||
| 75 | + _contentView.backgroundColor = [UIColor whiteColor]; | ||
| 76 | + _contentView.clipsToBounds = YES; | ||
| 77 | + _contentView.layer.cornerRadius = 20; | ||
| 78 | + UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, _contentView.width-20, _contentView.height-20)]; | ||
| 79 | + imageview.image = [CNLiveDigitalRMBHelp getHomeManagerBunddleImageWithName:@"mainView_front"]; | ||
| 80 | + [_contentView addSubview:imageview]; | ||
| 81 | + | ||
| 82 | + } | ||
| 83 | + return _contentView; | ||
| 84 | +} | ||
| 85 | +@end | ||
| 86 | + | ||
| 87 | +///反面View | ||
| 88 | +@interface CNBackMainView : UIView | ||
| 89 | + | ||
| 90 | +@property (nonatomic, strong)UIImageView *imageView; | ||
| 91 | +@property (nonatomic, strong)UIView *contentView; | ||
| 92 | + | ||
| 93 | +///点击反转事件 | ||
| 94 | +@property (nonatomic, copy) void(^tapTransformAciton)(void); | ||
| 95 | +@end | ||
| 96 | + | ||
| 97 | +@implementation CNBackMainView | ||
| 98 | + | ||
| 99 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 100 | +{ | ||
| 101 | + self = [super initWithFrame:frame]; | ||
| 102 | + if (self) { | ||
| 103 | + | ||
| 104 | + [self initUI]; | ||
| 105 | + | ||
| 106 | + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)]; | ||
| 107 | + [self addGestureRecognizer:tap]; | ||
| 108 | + | ||
| 109 | + } | ||
| 110 | + return self; | ||
| 111 | +} | ||
| 112 | +- (void)initUI | ||
| 113 | +{ | ||
| 114 | + [self addSubview:self.imageView]; | ||
| 115 | +// [self addSubview:self.contentView]; | ||
| 116 | + | ||
| 117 | +// UIButton *textBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 50, 50)]; | ||
| 118 | +// textBtn.backgroundColor = [UIColor redColor]; | ||
| 119 | +// [textBtn addTarget:self action:@selector(textBtnAction) forControlEvents:UIControlEventTouchUpInside]; | ||
| 120 | +// [self addSubview:textBtn]; | ||
| 121 | +} | ||
| 122 | +#pragma mark - 事件 | ||
| 123 | +- (void)tapAction | ||
| 124 | +{ | ||
| 125 | + if (self.tapTransformAciton) { | ||
| 126 | + self.tapTransformAciton(); | ||
| 127 | + } | ||
| 128 | +} | ||
| 129 | +//测试按钮 | ||
| 130 | +- (void)textBtnAction | ||
| 131 | +{ | ||
| 132 | + NSLog(@"相应了事件"); | ||
| 133 | +} | ||
| 134 | +#pragma mark - Lazy | ||
| 135 | +-(UIImageView *)imageView | ||
| 136 | +{ | ||
| 137 | + if (_imageView == nil) { | ||
| 138 | + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, self.width-20, self.height-20)]; | ||
| 139 | + _imageView.image = [CNLiveDigitalRMBHelp getHomeManagerBunddleImageWithName:@"backViewImage"]; | ||
| 140 | + | ||
| 141 | +// UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:_imageView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(20, 20)]; | ||
| 142 | +// CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; | ||
| 143 | +// maskLayer.frame = _imageView.bounds; | ||
| 144 | +// maskLayer.path = path.CGPath; | ||
| 145 | +// _imageView.layer.mask = maskLayer; | ||
| 146 | + } | ||
| 147 | + return _imageView; | ||
| 148 | +} | ||
| 149 | +- (UIView *)contentView | ||
| 150 | +{ | ||
| 151 | + if (_contentView == nil) { | ||
| 152 | + _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, self.imageView.bottom - 20, self.width, self.height-self.imageView.bottom + 20)]; | ||
| 153 | + _contentView.backgroundColor = [UIColor whiteColor]; | ||
| 154 | + _contentView.clipsToBounds = YES; | ||
| 155 | + _contentView.layer.cornerRadius = 20; | ||
| 156 | + | ||
| 157 | + } | ||
| 158 | + return _contentView; | ||
| 159 | +} | ||
| 160 | +@end | ||
| 161 | + | ||
| 162 | + | ||
| 163 | +///旋转动画时间 | ||
| 164 | +static CGFloat KTransformAnimationTime = 0.75; | ||
| 165 | + | ||
| 166 | +@interface CNMainView() | ||
| 167 | + | ||
| 168 | +///正面View | ||
| 169 | +@property (nonatomic, strong)CNFrontMainView *frontView; | ||
| 170 | +///反面View | ||
| 171 | +@property (nonatomic, strong)CNBackMainView *backView; | ||
| 172 | + | ||
| 173 | +@end | ||
| 174 | + | ||
| 175 | +@implementation CNMainView | ||
| 176 | + | ||
| 177 | +/* | ||
| 178 | +// Only override drawRect: if you perform custom drawing. | ||
| 179 | +// An empty implementation adversely affects performance during animation. | ||
| 180 | +- (void)drawRect:(CGRect)rect { | ||
| 181 | + // Drawing code | ||
| 182 | +} | ||
| 183 | +*/ | ||
| 184 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 185 | +{ | ||
| 186 | + self = [super initWithFrame:frame]; | ||
| 187 | + if (self) { | ||
| 188 | +// self.backgroundColor = [UIColor whiteColor]; | ||
| 189 | + [self initUI]; | ||
| 190 | + /** 一般设置圆角 必然有两个属性 masksToBounds,cornerRadius,但是同时设置阴影的话,masksToBounds属性,不能设置,设置就没有圆角阴影并存的效果*/ | ||
| 191 | +// self.clipsToBounds = YES; | ||
| 192 | + | ||
| 193 | + /* 1)shadowOpacity是(0,1]之间的值,默认是0,当它大于0时,阴影就会显示,并且,值越大,阴影透明度越低 | ||
| 194 | + 2)shadowColor 阴影的颜色,默认是黑色 | ||
| 195 | + 3)shadowOffset 阴影的方向和距离,默认是(0, -3),即阴影相对于Y轴有3个点的向上位移 | ||
| 196 | + 4)shadowRadius 阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线,当值越来越大的时候,边界线看上去就会越来越模糊和自然 | ||
| 197 | + */ | ||
| 198 | + self.layer.cornerRadius = 20; | ||
| 199 | + self.layer.shadowOpacity = 1; | ||
| 200 | + self.layer.shadowColor = CNLiveColorWithHexString(@"eeeeee").CGColor; | ||
| 201 | + self.layer.shadowOffset =CGSizeMake(10, 10); | ||
| 202 | + self.layer.shadowRadius = 10; | ||
| 203 | + | ||
| 204 | + | ||
| 205 | + | ||
| 206 | + } | ||
| 207 | + return self; | ||
| 208 | +} | ||
| 209 | +- (void)initUI | ||
| 210 | +{ | ||
| 211 | + [self addSubview:self.frontView]; | ||
| 212 | + [self addSubview:self.backView]; | ||
| 213 | + self.backView.hidden = YES; | ||
| 214 | + | ||
| 215 | +} | ||
| 216 | +#pragma mark - 事件 | ||
| 217 | +///旋转到反面 | ||
| 218 | +- (void)transformToBacnkView | ||
| 219 | +{ | ||
| 220 | + //旋转动画 | ||
| 221 | + [UIView animateWithDuration:KTransformAnimationTime animations:^{ | ||
| 222 | + self.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); | ||
| 223 | + } completion:^(BOOL finished) { | ||
| 224 | + | ||
| 225 | + }]; | ||
| 226 | + | ||
| 227 | + //让背面也旋转180度 | ||
| 228 | + self.backView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); | ||
| 229 | + | ||
| 230 | + //在中间时刻进行正反面view的隐藏显示处理 | ||
| 231 | + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((KTransformAnimationTime/2 -0.05) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | ||
| 232 | + | ||
| 233 | + [UIView animateWithDuration:0.05 animations:^{ | ||
| 234 | + self.frontView.hidden = YES; | ||
| 235 | + self.backView.hidden = NO; | ||
| 236 | + }]; | ||
| 237 | + }); | ||
| 238 | + | ||
| 239 | +} | ||
| 240 | +///旋转到正面 | ||
| 241 | +- (void)transformToFrontView | ||
| 242 | +{ | ||
| 243 | + //旋转动画 | ||
| 244 | + [UIView animateWithDuration:KTransformAnimationTime animations:^{ | ||
| 245 | + self.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0); | ||
| 246 | + } completion:^(BOOL finished) { | ||
| 247 | + //背面恢复旋转 | ||
| 248 | + self.backView.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0); | ||
| 249 | + }]; | ||
| 250 | + | ||
| 251 | + //在中间时刻进行正反面view的隐藏显示处理 | ||
| 252 | + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((KTransformAnimationTime/2 -0.05) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | ||
| 253 | + [UIView animateWithDuration:0.05 animations:^{ | ||
| 254 | + self.frontView.hidden = NO; | ||
| 255 | + self.backView.hidden = YES; | ||
| 256 | + }]; | ||
| 257 | + }); | ||
| 258 | +} | ||
| 259 | +#pragma mark - 公开方法 | ||
| 260 | + | ||
| 261 | +- (void)scaledView:(CGFloat)scale | ||
| 262 | +{ | ||
| 263 | + self.frontView.imageView.transform = CGAffineTransformMakeScale(scale, scale); | ||
| 264 | +} | ||
| 265 | +#pragma mark - Lazy | ||
| 266 | +- (CNFrontMainView *)frontView | ||
| 267 | +{ | ||
| 268 | + if (_frontView == nil) { | ||
| 269 | + _frontView = [[CNFrontMainView alloc] initWithFrame:self.bounds]; | ||
| 270 | + __weak CNMainView *weakSelf = self; | ||
| 271 | + _frontView.tapTransformAciton = ^{ | ||
| 272 | + [weakSelf transformToBacnkView]; | ||
| 273 | + }; | ||
| 274 | + } | ||
| 275 | + return _frontView; | ||
| 276 | +} | ||
| 277 | +#pragma mark - Lazy | ||
| 278 | +- (CNBackMainView *)backView | ||
| 279 | +{ | ||
| 280 | + if (_backView == nil) { | ||
| 281 | + _backView = [[CNBackMainView alloc] initWithFrame:self.bounds]; | ||
| 282 | + __weak CNMainView *weakSelf = self; | ||
| 283 | + | ||
| 284 | + _backView.tapTransformAciton = ^{ | ||
| 285 | + [weakSelf transformToFrontView]; | ||
| 286 | + }; | ||
| 287 | + } | ||
| 288 | + return _backView; | ||
| 289 | +} | ||
| 290 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNPayMoneyCodeView.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNPayMoneyCodeView.h | ||
| 1 | +// | ||
| 2 | +// CNPayMoneyCodeView.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | +///付钱码view | ||
| 12 | +@interface CNPayMoneyCodeView : UIView | ||
| 13 | + | ||
| 14 | +@end | ||
| 15 | + | ||
| 16 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNPayMoneyCodeView.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNPayMoneyCodeView.m | ||
| 1 | +// | ||
| 2 | +// CNPayMoneyCodeView.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/5. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNPayMoneyCodeView.h" | ||
| 9 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 10 | + | ||
| 11 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 12 | +#import<YYCategories/YYCategories.h> | ||
| 13 | + | ||
| 14 | +@implementation CNPayMoneyCodeView | ||
| 15 | + | ||
| 16 | +/* | ||
| 17 | +// Only override drawRect: if you perform custom drawing. | ||
| 18 | +// An empty implementation adversely affects performance during animation. | ||
| 19 | +- (void)drawRect:(CGRect)rect { | ||
| 20 | + // Drawing code | ||
| 21 | +} | ||
| 22 | +*/ | ||
| 23 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 24 | +{ | ||
| 25 | + self = [super initWithFrame:frame]; | ||
| 26 | + if (self) { | ||
| 27 | + self.backgroundColor = [UIColor whiteColor]; | ||
| 28 | + self.clipsToBounds = YES; | ||
| 29 | + self.layer.cornerRadius = 20; | ||
| 30 | + | ||
| 31 | + UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 10, self.width-40, self.height-20)]; | ||
| 32 | + imageview.image = [CNLiveDigitalRMBHelp getHomeManagerBunddleImageWithName:@"payMoneyImage"]; | ||
| 33 | + [self addSubview:imageview]; | ||
| 34 | + } | ||
| 35 | + return self; | ||
| 36 | +} | ||
| 37 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNTopCollectMoneyRemindView.h
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNTopCollectMoneyRemindView.h | ||
| 1 | +// | ||
| 2 | +// CNTopCollectMoneyRemindView.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/6. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import <UIKit/UIKit.h> | ||
| 9 | + | ||
| 10 | +NS_ASSUME_NONNULL_BEGIN | ||
| 11 | +///收钱下拉显示提醒View | ||
| 12 | +@interface CNTopCollectMoneyRemindView : UIView | ||
| 13 | + | ||
| 14 | +@end | ||
| 15 | + | ||
| 16 | +NS_ASSUME_NONNULL_END |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNTopCollectMoneyRemindView.m
0 → 100644
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNTopCollectMoneyRemindView.m | ||
| 1 | +// | ||
| 2 | +// CNTopCollectMoneyRemindView.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 2023/5/6. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "CNTopCollectMoneyRemindView.h" | ||
| 9 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 10 | + | ||
| 11 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 12 | +#import<YYCategories/YYCategories.h> | ||
| 13 | + | ||
| 14 | +@interface CNTopCollectMoneyRemindView() | ||
| 15 | + | ||
| 16 | +@end | ||
| 17 | + | ||
| 18 | +@implementation CNTopCollectMoneyRemindView | ||
| 19 | + | ||
| 20 | +/* | ||
| 21 | +// Only override drawRect: if you perform custom drawing. | ||
| 22 | +// An empty implementation adversely affects performance during animation. | ||
| 23 | +- (void)drawRect:(CGRect)rect { | ||
| 24 | + // Drawing code | ||
| 25 | +} | ||
| 26 | +*/ | ||
| 27 | + | ||
| 28 | +- (instancetype)initWithFrame:(CGRect)frame | ||
| 29 | +{ | ||
| 30 | + self = [super initWithFrame:frame]; | ||
| 31 | + if (self) { | ||
| 32 | + [self initUI]; | ||
| 33 | + } | ||
| 34 | + return self; | ||
| 35 | +} | ||
| 36 | +- (void)initUI | ||
| 37 | +{ | ||
| 38 | + CGFloat W = kScreenWidth - 100; | ||
| 39 | + UIBezierPath *bottomCircle = [UIBezierPath bezierPathWithArcCenter:CGPointMake(W/2, 0) radius:W/2 startAngle:0 endAngle:M_PI clockwise:YES]; | ||
| 40 | + CAShapeLayer *bottomShapeLayer = [[CAShapeLayer alloc] init]; | ||
| 41 | + bottomShapeLayer.path = bottomCircle.CGPath; | ||
| 42 | + bottomShapeLayer.fillColor = CNLiveColorWithHexString(@"#F5F5F5").CGColor; | ||
| 43 | + | ||
| 44 | + [self.layer addSublayer:bottomShapeLayer]; | ||
| 45 | + | ||
| 46 | + UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom]; | ||
| 47 | + btn.frame = CGRectMake((self.width - 50)/2, self.height-70, 50, 50); | ||
| 48 | + [btn setTitle:@"收钱" forState:UIControlStateNormal]; | ||
| 49 | + [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | ||
| 50 | + btn.titleLabel.font = [UIFont systemFontOfSize:17]; | ||
| 51 | + btn.userInteractionEnabled = NO; | ||
| 52 | + [self addSubview:btn]; | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/NewPagedFlowView.h
0 → 100755
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/NewPagedFlowView.h | ||
| 1 | +// | ||
| 2 | +// NewPagedFlowView.h | ||
| 3 | +// dianshang | ||
| 4 | +// | ||
| 5 | +// Created by sskh on 16/7/13. | ||
| 6 | +// Copyright © 2016年 Mars. All rights reserved. | ||
| 7 | +// Designed By PageGuo, | ||
| 8 | +// QQ:799573715 | ||
| 9 | +// github:https://github.com/PageGuo/NewPagedFlowView | ||
| 10 | + | ||
| 11 | +#import <UIKit/UIKit.h> | ||
| 12 | +#import "PGIndexBannerSubiew.h" | ||
| 13 | + | ||
| 14 | +@protocol NewPagedFlowViewDataSource; | ||
| 15 | +@protocol NewPagedFlowViewDelegate; | ||
| 16 | + | ||
| 17 | +/****************************** | ||
| 18 | + | ||
| 19 | + 页面滚动的方向分为横向和纵向 | ||
| 20 | + | ||
| 21 | + Version 1.0: | ||
| 22 | + 目的:实现类似于选择电影票的效果,并且实现无限/自动轮播 | ||
| 23 | + | ||
| 24 | + 特点:1.无限轮播;2.自动轮播;3.电影票样式的层次感;4.非当前显示view具有缩放和透明的特效 | ||
| 25 | + | ||
| 26 | + 问题:考虑到轮播图的数量不会太大,暂时未做重用处理;对设备性能影响不明显,后期版本会考虑添加重用标识模仿tableview的重用 | ||
| 27 | + | ||
| 28 | + ******************************/ | ||
| 29 | + | ||
| 30 | +typedef enum{ | ||
| 31 | + NewPagedFlowViewOrientationHorizontal = 0, | ||
| 32 | + NewPagedFlowViewOrientationVertical | ||
| 33 | +}NewPagedFlowViewOrientation; | ||
| 34 | + | ||
| 35 | +@interface NewPagedFlowView : UIView<UIScrollViewDelegate> | ||
| 36 | + | ||
| 37 | +/** | ||
| 38 | + * 默认为横向 | ||
| 39 | + */ | ||
| 40 | +@property (nonatomic,assign) NewPagedFlowViewOrientation orientation; | ||
| 41 | + | ||
| 42 | +@property (nonatomic, strong) UIScrollView *scrollView; | ||
| 43 | + | ||
| 44 | +@property (nonatomic,assign) BOOL needsReload; | ||
| 45 | +/** | ||
| 46 | + * 总页数 | ||
| 47 | + */ | ||
| 48 | +@property (nonatomic,assign) NSInteger pageCount; | ||
| 49 | + | ||
| 50 | +@property (nonatomic,strong) NSMutableArray *cells; | ||
| 51 | +@property (nonatomic,assign) NSRange visibleRange; | ||
| 52 | +/** | ||
| 53 | + * 如果以后需要支持reuseIdentifier,这边就得使用字典类型了 | ||
| 54 | + */ | ||
| 55 | +@property (nonatomic,strong) NSMutableArray *reusableCells; | ||
| 56 | + | ||
| 57 | +@property (nonatomic,assign) id <NewPagedFlowViewDataSource> dataSource; | ||
| 58 | +@property (nonatomic,assign) id <NewPagedFlowViewDelegate> delegate; | ||
| 59 | + | ||
| 60 | +/** | ||
| 61 | + * 指示器 | ||
| 62 | + */ | ||
| 63 | +@property (nonatomic,retain) UIPageControl *pageControl; | ||
| 64 | + | ||
| 65 | +/** | ||
| 66 | + * 非当前页的透明比例 | ||
| 67 | + */ | ||
| 68 | +@property (nonatomic, assign) CGFloat minimumPageAlpha; | ||
| 69 | + | ||
| 70 | +/** | ||
| 71 | + 左右间距,默认20 | ||
| 72 | + */ | ||
| 73 | +@property (nonatomic, assign) CGFloat leftRightMargin; | ||
| 74 | + | ||
| 75 | +/** | ||
| 76 | + 上下间距,默认30 | ||
| 77 | + */ | ||
| 78 | +@property (nonatomic, assign) CGFloat topBottomMargin; | ||
| 79 | + | ||
| 80 | +/** | ||
| 81 | + * 是否开启自动滚动,默认为开启 | ||
| 82 | + */ | ||
| 83 | +@property (nonatomic, assign) BOOL isOpenAutoScroll; | ||
| 84 | + | ||
| 85 | +/** | ||
| 86 | + * 是否开启无限轮播,默认为开启 | ||
| 87 | + */ | ||
| 88 | +@property (nonatomic, assign) BOOL isCarousel; | ||
| 89 | + | ||
| 90 | +/** | ||
| 91 | + * 当前是第几页 | ||
| 92 | + */ | ||
| 93 | +@property (nonatomic, assign, readonly) NSInteger currentPageIndex; | ||
| 94 | + | ||
| 95 | +/** | ||
| 96 | + * 定时器 | ||
| 97 | + */ | ||
| 98 | +@property (nonatomic, weak) NSTimer *timer; | ||
| 99 | + | ||
| 100 | +/** | ||
| 101 | + * 自动切换视图的时间,默认是5.0 | ||
| 102 | + */ | ||
| 103 | +@property (nonatomic, assign) CGFloat autoTime; | ||
| 104 | + | ||
| 105 | +/** | ||
| 106 | + * 原始页数 | ||
| 107 | + */ | ||
| 108 | +@property (nonatomic, assign) NSInteger orginPageCount; | ||
| 109 | + | ||
| 110 | +/** | ||
| 111 | + * 刷新视图 | ||
| 112 | + */ | ||
| 113 | +- (void)reloadData; | ||
| 114 | + | ||
| 115 | +/** | ||
| 116 | + * 获取可重复使用的Cell | ||
| 117 | + * | ||
| 118 | + * @return <#return value description#> | ||
| 119 | + */ | ||
| 120 | +- (PGIndexBannerSubiew *)dequeueReusableCell; | ||
| 121 | + | ||
| 122 | +/** | ||
| 123 | + * 滚动到指定的页面 | ||
| 124 | + * | ||
| 125 | + * @param pageNumber <#pageNumber description#> | ||
| 126 | + */ | ||
| 127 | +- (void)scrollToPage:(NSUInteger)pageNumber; | ||
| 128 | + | ||
| 129 | +/** | ||
| 130 | + * 开启定时器,废弃 | ||
| 131 | + */ | ||
| 132 | +//- (void)startTimer; | ||
| 133 | + | ||
| 134 | +/** | ||
| 135 | + * 关闭定时器,关闭自动滚动 | ||
| 136 | + */ | ||
| 137 | +- (void)stopTimer; | ||
| 138 | + | ||
| 139 | +/** | ||
| 140 | + 调整中间页居中,经常出现滚动卡住一半时调用 | ||
| 141 | + */ | ||
| 142 | +- (void)adjustCenterSubview; | ||
| 143 | + | ||
| 144 | +@end | ||
| 145 | + | ||
| 146 | + | ||
| 147 | +@protocol NewPagedFlowViewDelegate<NSObject> | ||
| 148 | + | ||
| 149 | +@optional | ||
| 150 | +/** | ||
| 151 | + * 当前显示cell的Size(中间页显示大小) | ||
| 152 | + * | ||
| 153 | + * @param flowView <#flowView description#> | ||
| 154 | + * | ||
| 155 | + * @return <#return value description#> | ||
| 156 | + */ | ||
| 157 | +- (CGSize)sizeForPageInFlowView:(NewPagedFlowView *)flowView; | ||
| 158 | + | ||
| 159 | +/** | ||
| 160 | + * 滚动到了某一列 | ||
| 161 | + * | ||
| 162 | + * @param pageNumber 滚动到的列索引 | ||
| 163 | + * @param flowView <#flowView description#> | ||
| 164 | + */ | ||
| 165 | +- (void)didScrollToPage:(NSInteger)pageNumber inFlowView:(NewPagedFlowView *)flowView; | ||
| 166 | + | ||
| 167 | +/** | ||
| 168 | + * 点击了第几个cell | ||
| 169 | + * | ||
| 170 | + * @param subView 点击的控件 | ||
| 171 | + * @param subIndex 点击控件的index | ||
| 172 | + * | ||
| 173 | + */ | ||
| 174 | +- (void)didSelectCell:(PGIndexBannerSubiew *)subView withSubViewIndex:(NSInteger)subIndex; | ||
| 175 | + | ||
| 176 | +@end | ||
| 177 | + | ||
| 178 | + | ||
| 179 | +@protocol NewPagedFlowViewDataSource <NSObject> | ||
| 180 | + | ||
| 181 | +/** | ||
| 182 | + * 返回显示View的个数 | ||
| 183 | + * | ||
| 184 | + * @param flowView <#flowView description#> | ||
| 185 | + * | ||
| 186 | + * @return <#return value description#> | ||
| 187 | + */ | ||
| 188 | +- (NSInteger)numberOfPagesInFlowView:(NewPagedFlowView *)flowView; | ||
| 189 | + | ||
| 190 | +/** | ||
| 191 | + * 给某一列设置属性 | ||
| 192 | + * | ||
| 193 | + * @param flowView <#flowView description#> | ||
| 194 | + * @param index <#index description#> | ||
| 195 | + * | ||
| 196 | + * @return <#return value description#> | ||
| 197 | + */ | ||
| 198 | +- (PGIndexBannerSubiew *)flowView:(NewPagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index; | ||
| 199 | + | ||
| 200 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/NewPagedFlowView.m
0 → 100755
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/NewPagedFlowView.m | ||
| 1 | +// | ||
| 2 | +// NewPagedFlowView.m | ||
| 3 | +// dianshang | ||
| 4 | +// | ||
| 5 | +// Created by sskh on 16/7/13. | ||
| 6 | +// Copyright © 2016年 Mars. All rights reserved. | ||
| 7 | +// Designed By PageGuo, | ||
| 8 | +// QQ:799573715 | ||
| 9 | +// github:https://github.com/PageGuo/NewPagedFlowView | ||
| 10 | + | ||
| 11 | +#import "NewPagedFlowView.h" | ||
| 12 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 13 | + | ||
| 14 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 15 | +#import<YYCategories/YYCategories.h> | ||
| 16 | + | ||
| 17 | +@interface NewPagedFlowView () | ||
| 18 | + | ||
| 19 | +@property (nonatomic, assign, readwrite) NSInteger currentPageIndex; | ||
| 20 | + | ||
| 21 | +/** | ||
| 22 | + * 计时器用到的页数 | ||
| 23 | + */ | ||
| 24 | +@property (nonatomic, assign) NSInteger page; | ||
| 25 | + | ||
| 26 | +/** | ||
| 27 | + * 一页的尺寸 | ||
| 28 | + */ | ||
| 29 | +@property (nonatomic,assign) CGSize pageSize; | ||
| 30 | + | ||
| 31 | +@end | ||
| 32 | + | ||
| 33 | +//子控制器的类名 | ||
| 34 | +static NSString *subviewClassName; | ||
| 35 | + | ||
| 36 | +@implementation NewPagedFlowView | ||
| 37 | + | ||
| 38 | +//////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 39 | +#pragma mark - | ||
| 40 | +#pragma mark Private Methods | ||
| 41 | +- (void)initialize{ | ||
| 42 | + self.clipsToBounds = YES; | ||
| 43 | + | ||
| 44 | + self.needsReload = YES; | ||
| 45 | + self.pageCount = 0; | ||
| 46 | + self.isOpenAutoScroll = YES; | ||
| 47 | + self.isCarousel = YES; | ||
| 48 | + self.leftRightMargin = 20; | ||
| 49 | + self.topBottomMargin = 30; | ||
| 50 | + _currentPageIndex = 0; | ||
| 51 | + | ||
| 52 | + _minimumPageAlpha = 1.0; | ||
| 53 | + _autoTime = 5.0; | ||
| 54 | + | ||
| 55 | + self.visibleRange = NSMakeRange(0, 0); | ||
| 56 | + | ||
| 57 | + self.reusableCells = [[NSMutableArray alloc] initWithCapacity:0]; | ||
| 58 | + self.cells = [[NSMutableArray alloc] initWithCapacity:0]; | ||
| 59 | + | ||
| 60 | + self.scrollView = [[UIScrollView alloc] initWithFrame:self.bounds]; | ||
| 61 | + self.scrollView.scrollsToTop = NO; | ||
| 62 | + self.scrollView.delegate = self; | ||
| 63 | + self.scrollView.pagingEnabled = YES; | ||
| 64 | + self.scrollView.clipsToBounds = NO; | ||
| 65 | + self.scrollView.showsHorizontalScrollIndicator = NO; | ||
| 66 | + self.scrollView.showsVerticalScrollIndicator = NO; | ||
| 67 | + | ||
| 68 | + subviewClassName = @"PGIndexBannerSubiew"; | ||
| 69 | + | ||
| 70 | + [self addSubview:self.scrollView]; | ||
| 71 | + | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +- (void)setLeftRightMargin:(CGFloat)leftRightMargin { | ||
| 75 | + _leftRightMargin = leftRightMargin * 0.5; | ||
| 76 | + | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +- (void)setTopBottomMargin:(CGFloat)topBottomMargin { | ||
| 80 | + _topBottomMargin = topBottomMargin * 0.5; | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +- (void)startTimer { | ||
| 84 | + | ||
| 85 | + if (self.orginPageCount > 1 && self.isOpenAutoScroll && self.isCarousel) { | ||
| 86 | + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:self.autoTime target:self selector:@selector(autoNextPage) userInfo:nil repeats:YES]; | ||
| 87 | + self.timer = timer; | ||
| 88 | + [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; | ||
| 89 | + | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | +} | ||
| 93 | + | ||
| 94 | +- (void)stopTimer { | ||
| 95 | + | ||
| 96 | + if (self.timer) { | ||
| 97 | + [self.timer invalidate]; | ||
| 98 | + self.timer = nil; | ||
| 99 | + } | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +- (void)adjustCenterSubview { | ||
| 103 | + if (self.isOpenAutoScroll && self.orginPageCount > 0) { | ||
| 104 | + [_scrollView setContentOffset:CGPointMake(_pageSize.width * self.page, 0) animated:NO]; | ||
| 105 | + } | ||
| 106 | +} | ||
| 107 | + | ||
| 108 | +#pragma mark --自动轮播 | ||
| 109 | +- (void)autoNextPage { | ||
| 110 | + | ||
| 111 | + self.page ++; | ||
| 112 | + | ||
| 113 | + | ||
| 114 | + | ||
| 115 | + switch (self.orientation) { | ||
| 116 | + case NewPagedFlowViewOrientationHorizontal:{ | ||
| 117 | + | ||
| 118 | + [_scrollView setContentOffset:CGPointMake(self.page * _pageSize.width, 0) animated:YES]; | ||
| 119 | + break; | ||
| 120 | + } | ||
| 121 | + case NewPagedFlowViewOrientationVertical:{ | ||
| 122 | + | ||
| 123 | + [_scrollView setContentOffset:CGPointMake(0, self.page * _pageSize.height) animated:YES]; | ||
| 124 | + | ||
| 125 | + break; | ||
| 126 | + } | ||
| 127 | + default: | ||
| 128 | + break; | ||
| 129 | + } | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | + | ||
| 133 | +- (void)queueReusableCell:(PGIndexBannerSubiew *)cell{ | ||
| 134 | + [_reusableCells addObject:cell]; | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +- (void)removeCellAtIndex:(NSInteger)index{ | ||
| 138 | + PGIndexBannerSubiew *cell = [_cells objectAtIndex:index]; | ||
| 139 | + if ((NSObject *)cell == [NSNull null]) { | ||
| 140 | + return; | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + [self queueReusableCell:cell]; | ||
| 144 | + | ||
| 145 | + if (cell.superview) { | ||
| 146 | + [cell removeFromSuperview]; | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + [_cells replaceObjectAtIndex:index withObject:[NSNull null]]; | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +- (void)refreshVisibleCellAppearance{ | ||
| 153 | + | ||
| 154 | + if (_minimumPageAlpha == 1.0 && self.leftRightMargin == 0 && self.topBottomMargin == 0) { | ||
| 155 | + return;//无需更新 | ||
| 156 | + } | ||
| 157 | + switch (self.orientation) { | ||
| 158 | + case NewPagedFlowViewOrientationHorizontal:{ | ||
| 159 | + CGFloat offset = _scrollView.contentOffset.x; | ||
| 160 | + | ||
| 161 | + for (NSInteger i = self.visibleRange.location; i < self.visibleRange.location + _visibleRange.length; i++) { | ||
| 162 | + PGIndexBannerSubiew *cell = [_cells objectAtIndex:i]; | ||
| 163 | + subviewClassName = NSStringFromClass([cell class]); | ||
| 164 | + CGFloat origin = cell.frame.origin.x; | ||
| 165 | + CGFloat delta = fabs(origin - offset); | ||
| 166 | + | ||
| 167 | + CGRect originCellFrame = CGRectMake(_pageSize.width * i, 0, _pageSize.width, _pageSize.height);//如果没有缩小效果的情况下的本该的Frame | ||
| 168 | + | ||
| 169 | + if (delta < _pageSize.width) { | ||
| 170 | + | ||
| 171 | +// cell.coverView.alpha = (delta / _pageSize.width) * _minimumPageAlpha; | ||
| 172 | + | ||
| 173 | + CGFloat leftRightInset = self.leftRightMargin * delta / _pageSize.width; | ||
| 174 | + CGFloat topBottomInset = self.topBottomMargin * delta / _pageSize.width; | ||
| 175 | + | ||
| 176 | + cell.layer.transform = CATransform3DMakeScale((_pageSize.width-leftRightInset*2)/_pageSize.width,(_pageSize.height-topBottomInset*2)/_pageSize.height, 1.0); | ||
| 177 | + cell.frame = UIEdgeInsetsInsetRect(originCellFrame, UIEdgeInsetsMake(topBottomInset, leftRightInset, topBottomInset, leftRightInset)); | ||
| 178 | + | ||
| 179 | + | ||
| 180 | + } else { | ||
| 181 | +// cell.coverView.alpha = _minimumPageAlpha; | ||
| 182 | + cell.layer.transform = CATransform3DMakeScale((_pageSize.width-self.leftRightMargin*2)/_pageSize.width,(_pageSize.height-self.topBottomMargin*2)/_pageSize.height, 1.0); | ||
| 183 | + cell.frame = UIEdgeInsetsInsetRect(originCellFrame, UIEdgeInsetsMake(self.topBottomMargin, self.leftRightMargin, self.topBottomMargin, self.leftRightMargin)); | ||
| 184 | + | ||
| 185 | + | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + } | ||
| 189 | + break; | ||
| 190 | + } | ||
| 191 | + case NewPagedFlowViewOrientationVertical:{ | ||
| 192 | + CGFloat offset = _scrollView.contentOffset.y; | ||
| 193 | + | ||
| 194 | + for (NSInteger i = self.visibleRange.location; i < self.visibleRange.location + _visibleRange.length; i++) { | ||
| 195 | + PGIndexBannerSubiew *cell = [_cells objectAtIndex:i]; | ||
| 196 | + subviewClassName = NSStringFromClass([cell class]); | ||
| 197 | + CGFloat origin = cell.frame.origin.y; | ||
| 198 | + CGFloat delta = fabs(origin - offset); | ||
| 199 | + | ||
| 200 | + CGRect originCellFrame = CGRectMake(0, _pageSize.height * i, _pageSize.width, _pageSize.height);//如果没有缩小效果的情况下的本该的Frame | ||
| 201 | + | ||
| 202 | + if (delta < _pageSize.height) { | ||
| 203 | +// cell.coverView.alpha = (delta / _pageSize.height) * _minimumPageAlpha; | ||
| 204 | + | ||
| 205 | + CGFloat leftRightInset = self.leftRightMargin * delta / _pageSize.height; | ||
| 206 | + CGFloat topBottomInset = self.topBottomMargin * delta / _pageSize.height; | ||
| 207 | + | ||
| 208 | + cell.layer.transform = CATransform3DMakeScale((_pageSize.width-leftRightInset*2)/_pageSize.width,(_pageSize.height-topBottomInset*2) / _pageSize.height, 1.0); | ||
| 209 | + cell.frame = UIEdgeInsetsInsetRect(originCellFrame, UIEdgeInsetsMake(topBottomInset, leftRightInset, topBottomInset, leftRightInset)); | ||
| 210 | +// cell.mainImageView.frame = cell.bounds; | ||
| 211 | + } else { | ||
| 212 | +// cell.coverView.alpha = _minimumPageAlpha; | ||
| 213 | + cell.frame = UIEdgeInsetsInsetRect(originCellFrame, UIEdgeInsetsMake(self.topBottomMargin, self.leftRightMargin, self.topBottomMargin, self.leftRightMargin)); | ||
| 214 | +// cell.mainImageView.frame = cell.bounds; | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + } | ||
| 218 | + } | ||
| 219 | + default: | ||
| 220 | + break; | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | +} | ||
| 224 | + | ||
| 225 | +- (void)setPageAtIndex:(NSInteger)pageIndex{ | ||
| 226 | + NSParameterAssert(pageIndex >= 0 && pageIndex < [_cells count]); | ||
| 227 | + | ||
| 228 | + PGIndexBannerSubiew *cell = [_cells objectAtIndex:pageIndex]; | ||
| 229 | + | ||
| 230 | + if ((NSObject *)cell == [NSNull null]) { | ||
| 231 | + cell = [_dataSource flowView:self cellForPageAtIndex:pageIndex % self.orginPageCount]; | ||
| 232 | + NSAssert(cell!=nil, @"datasource must not return nil"); | ||
| 233 | + [_cells replaceObjectAtIndex:pageIndex withObject:cell]; | ||
| 234 | + | ||
| 235 | + cell.tag = pageIndex % self.orginPageCount + 100; | ||
| 236 | + [cell setSubviewsWithSuperViewBounds:CGRectMake(0, 0, _pageSize.width, _pageSize.height)]; | ||
| 237 | + | ||
| 238 | + __weak __typeof(self) weakSelf = self; | ||
| 239 | + cell.didSelectCellBlock = ^(NSInteger tag, PGIndexBannerSubiew *cell) { | ||
| 240 | + [weakSelf singleCellTapAction:tag withCell:cell]; | ||
| 241 | + }; | ||
| 242 | + | ||
| 243 | + switch (self.orientation) { | ||
| 244 | + case NewPagedFlowViewOrientationHorizontal: | ||
| 245 | + cell.frame = CGRectMake(_pageSize.width * pageIndex, 0, _pageSize.width, _pageSize.height); | ||
| 246 | + break; | ||
| 247 | + case NewPagedFlowViewOrientationVertical: | ||
| 248 | + cell.frame = CGRectMake(0, _pageSize.height * pageIndex, _pageSize.width, _pageSize.height); | ||
| 249 | + break; | ||
| 250 | + default: | ||
| 251 | + break; | ||
| 252 | + } | ||
| 253 | + | ||
| 254 | + if (!cell.superview) { | ||
| 255 | + [_scrollView addSubview:cell]; | ||
| 256 | + } | ||
| 257 | + } | ||
| 258 | +} | ||
| 259 | + | ||
| 260 | + | ||
| 261 | +- (void)setPagesAtContentOffset:(CGPoint)offset{ | ||
| 262 | + //计算_visibleRange | ||
| 263 | + CGPoint startPoint = CGPointMake(offset.x - _scrollView.frame.origin.x, offset.y - _scrollView.frame.origin.y); | ||
| 264 | + CGPoint endPoint = CGPointMake(startPoint.x + self.bounds.size.width, startPoint.y + self.bounds.size.height); | ||
| 265 | + | ||
| 266 | + | ||
| 267 | + switch (self.orientation) { | ||
| 268 | + case NewPagedFlowViewOrientationHorizontal:{ | ||
| 269 | + NSInteger startIndex = 0; | ||
| 270 | + for (int i =0; i < [_cells count]; i++) { | ||
| 271 | + if (_pageSize.width * (i +1) > startPoint.x) { | ||
| 272 | + startIndex = i; | ||
| 273 | + break; | ||
| 274 | + } | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + NSInteger endIndex = startIndex; | ||
| 278 | + for (NSInteger i = startIndex; i < [_cells count]; i++) { | ||
| 279 | + //如果都不超过则取最后一个 | ||
| 280 | + if ((_pageSize.width * (i + 1) < endPoint.x && _pageSize.width * (i + 2) >= endPoint.x) || i+ 2 == [_cells count]) { | ||
| 281 | + endIndex = i + 1;//i+2 是以个数,所以其index需要减去1 | ||
| 282 | + break; | ||
| 283 | + } | ||
| 284 | + } | ||
| 285 | + | ||
| 286 | + //可见页分别向前向后扩展一个,提高效率 | ||
| 287 | + startIndex = MAX(startIndex - 1, 0); | ||
| 288 | + endIndex = MIN(endIndex + 1, [_cells count] - 1); | ||
| 289 | + | ||
| 290 | + // self.visibleRange.location = startIndex; | ||
| 291 | + // self.visibleRange.length = endIndex - startIndex + 1; | ||
| 292 | + self.visibleRange = NSMakeRange(startIndex, endIndex - startIndex + 1); | ||
| 293 | + for (NSInteger i = startIndex; i <= endIndex; i++) { | ||
| 294 | + [self setPageAtIndex:i]; | ||
| 295 | + } | ||
| 296 | + | ||
| 297 | + for (int i = 0; i < startIndex; i ++) { | ||
| 298 | + [self removeCellAtIndex:i]; | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + for (NSInteger i = endIndex + 1; i < [_cells count]; i ++) { | ||
| 302 | + [self removeCellAtIndex:i]; | ||
| 303 | + } | ||
| 304 | + break; | ||
| 305 | + } | ||
| 306 | + case NewPagedFlowViewOrientationVertical:{ | ||
| 307 | + NSInteger startIndex = 0; | ||
| 308 | + for (int i =0; i < [_cells count]; i++) { | ||
| 309 | + if (_pageSize.height * (i +1) > startPoint.y) { | ||
| 310 | + startIndex = i; | ||
| 311 | + break; | ||
| 312 | + } | ||
| 313 | + } | ||
| 314 | + | ||
| 315 | + NSInteger endIndex = startIndex; | ||
| 316 | + for (NSInteger i = startIndex; i < [_cells count]; i++) { | ||
| 317 | + //如果都不超过则取最后一个 | ||
| 318 | + if ((_pageSize.height * (i + 1) < endPoint.y && _pageSize.height * (i + 2) >= endPoint.y) || i+ 2 == [_cells count]) { | ||
| 319 | + endIndex = i + 1;//i+2 是以个数,所以其index需要减去1 | ||
| 320 | + break; | ||
| 321 | + } | ||
| 322 | + } | ||
| 323 | + | ||
| 324 | + //可见页分别向前向后扩展一个,提高效率 | ||
| 325 | + startIndex = MAX(startIndex - 1, 0); | ||
| 326 | + endIndex = MIN(endIndex + 1, [_cells count] - 1); | ||
| 327 | + | ||
| 328 | + _visibleRange.location = startIndex; | ||
| 329 | + _visibleRange.length = endIndex - startIndex + 1; | ||
| 330 | + | ||
| 331 | + for (NSInteger i = startIndex; i <= endIndex; i++) { | ||
| 332 | + [self setPageAtIndex:i]; | ||
| 333 | + } | ||
| 334 | + | ||
| 335 | + for (NSInteger i = 0; i < startIndex; i ++) { | ||
| 336 | + [self removeCellAtIndex:i]; | ||
| 337 | + } | ||
| 338 | + | ||
| 339 | + for (NSInteger i = endIndex + 1; i < [_cells count]; i ++) { | ||
| 340 | + [self removeCellAtIndex:i]; | ||
| 341 | + } | ||
| 342 | + break; | ||
| 343 | + } | ||
| 344 | + default: | ||
| 345 | + break; | ||
| 346 | + } | ||
| 347 | + | ||
| 348 | + | ||
| 349 | + | ||
| 350 | +} | ||
| 351 | + | ||
| 352 | + | ||
| 353 | + | ||
| 354 | + | ||
| 355 | +//////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 356 | +#pragma mark - | ||
| 357 | +#pragma mark Override Methods | ||
| 358 | + | ||
| 359 | +- (id)initWithFrame:(CGRect)frame | ||
| 360 | +{ | ||
| 361 | + self = [super initWithFrame:frame]; | ||
| 362 | + if (self) | ||
| 363 | + { | ||
| 364 | + [self initialize]; | ||
| 365 | + } | ||
| 366 | + return self; | ||
| 367 | +} | ||
| 368 | + | ||
| 369 | +- (id)initWithCoder:(NSCoder *)aDecoder | ||
| 370 | +{ | ||
| 371 | + self = [super initWithCoder:aDecoder]; | ||
| 372 | + if (self) | ||
| 373 | + { | ||
| 374 | + [self initialize]; | ||
| 375 | + } | ||
| 376 | + return self; | ||
| 377 | +} | ||
| 378 | + | ||
| 379 | + | ||
| 380 | +//////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 381 | +#pragma mark NewPagedFlowView API | ||
| 382 | + | ||
| 383 | +- (void)reloadData { | ||
| 384 | + _needsReload = YES; | ||
| 385 | + | ||
| 386 | + //移除所有self.scrollView的子控件 | ||
| 387 | + for (UIView *view in self.scrollView.subviews) { | ||
| 388 | + if ([NSStringFromClass(view.class) isEqualToString:subviewClassName] || [view isKindOfClass:[PGIndexBannerSubiew class]]) { | ||
| 389 | + [view removeFromSuperview]; | ||
| 390 | + } | ||
| 391 | + } | ||
| 392 | + | ||
| 393 | + [self stopTimer]; | ||
| 394 | + | ||
| 395 | + if (_needsReload) { | ||
| 396 | + //如果需要重新加载数据,则需要清空相关数据全部重新加载 | ||
| 397 | + | ||
| 398 | + | ||
| 399 | + //重置pageCount | ||
| 400 | + if (_dataSource && [_dataSource respondsToSelector:@selector(numberOfPagesInFlowView:)]) { | ||
| 401 | + | ||
| 402 | + //原始页数 | ||
| 403 | + self.orginPageCount = [_dataSource numberOfPagesInFlowView:self]; | ||
| 404 | + | ||
| 405 | + //总页数 | ||
| 406 | + if (self.isCarousel) { | ||
| 407 | + _pageCount = self.orginPageCount == 1 ? 1: [_dataSource numberOfPagesInFlowView:self] * 3; | ||
| 408 | + }else { | ||
| 409 | + _pageCount = self.orginPageCount == 1 ? 1: [_dataSource numberOfPagesInFlowView:self]; | ||
| 410 | + } | ||
| 411 | + | ||
| 412 | + //如果总页数为0,return | ||
| 413 | + if (_pageCount == 0) { | ||
| 414 | + | ||
| 415 | + return; | ||
| 416 | + } | ||
| 417 | + | ||
| 418 | + if (self.pageControl && [self.pageControl respondsToSelector:@selector(setNumberOfPages:)]) { | ||
| 419 | + [self.pageControl setNumberOfPages:self.orginPageCount]; | ||
| 420 | + } | ||
| 421 | + } | ||
| 422 | + | ||
| 423 | + //重置pageWidth | ||
| 424 | + _pageSize = CGSizeMake(self.bounds.size.width - 4 * self.leftRightMargin,(self.bounds.size.width - 4 * self.leftRightMargin) * 9 /16); | ||
| 425 | + if (self.delegate && self.delegate && [self.delegate respondsToSelector:@selector(sizeForPageInFlowView:)]) { | ||
| 426 | + _pageSize = [self.delegate sizeForPageInFlowView:self]; | ||
| 427 | + } | ||
| 428 | + | ||
| 429 | + [_reusableCells removeAllObjects]; | ||
| 430 | + _visibleRange = NSMakeRange(0, 0); | ||
| 431 | + | ||
| 432 | + //填充cells数组 | ||
| 433 | + [_cells removeAllObjects]; | ||
| 434 | + for (NSInteger index=0; index<_pageCount; index++) | ||
| 435 | + { | ||
| 436 | + [_cells addObject:[NSNull null]]; | ||
| 437 | + } | ||
| 438 | + | ||
| 439 | + // 重置_scrollView的contentSize | ||
| 440 | + switch (self.orientation) { | ||
| 441 | + case NewPagedFlowViewOrientationHorizontal://横向 | ||
| 442 | + _scrollView.frame = CGRectMake(0, 0, _pageSize.width, _pageSize.height); | ||
| 443 | + _scrollView.contentSize = CGSizeMake(_pageSize.width * _pageCount,0); | ||
| 444 | + CGPoint theCenter = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); | ||
| 445 | + _scrollView.center = theCenter; | ||
| 446 | + | ||
| 447 | + if (self.orginPageCount > 1) { | ||
| 448 | + | ||
| 449 | + if (self.isCarousel) { | ||
| 450 | + | ||
| 451 | + //滚到第二组 | ||
| 452 | + [_scrollView setContentOffset:CGPointMake(_pageSize.width * self.orginPageCount, 0) animated:NO]; | ||
| 453 | + | ||
| 454 | + self.page = self.orginPageCount; | ||
| 455 | + | ||
| 456 | + //启动自动轮播 | ||
| 457 | + [self startTimer]; | ||
| 458 | + | ||
| 459 | + }else { | ||
| 460 | + //滚到开始 | ||
| 461 | + [_scrollView setContentOffset:CGPointMake(0, 0) animated:NO]; | ||
| 462 | + | ||
| 463 | + self.page = self.orginPageCount; | ||
| 464 | + | ||
| 465 | + } | ||
| 466 | + | ||
| 467 | + } | ||
| 468 | + | ||
| 469 | + break; | ||
| 470 | + case NewPagedFlowViewOrientationVertical:{ | ||
| 471 | + _scrollView.frame = CGRectMake(0, 0, _pageSize.width, _pageSize.height); | ||
| 472 | + _scrollView.contentSize = CGSizeMake(0 ,_pageSize.height * _pageCount); | ||
| 473 | + CGPoint theCenter = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); | ||
| 474 | + _scrollView.center = theCenter; | ||
| 475 | + | ||
| 476 | + if (self.orginPageCount > 1) { | ||
| 477 | + | ||
| 478 | + if (self.isCarousel) { | ||
| 479 | + //滚到第二组 | ||
| 480 | + [_scrollView setContentOffset:CGPointMake(0, _pageSize.height * self.orginPageCount) animated:NO]; | ||
| 481 | + | ||
| 482 | + self.page = self.orginPageCount; | ||
| 483 | + | ||
| 484 | + //启动自动轮播 | ||
| 485 | + [self startTimer]; | ||
| 486 | + }else { | ||
| 487 | + //滚到第二组 | ||
| 488 | + [_scrollView setContentOffset:CGPointMake(0, 0) animated:NO]; | ||
| 489 | + | ||
| 490 | + self.page = self.orginPageCount; | ||
| 491 | + | ||
| 492 | + } | ||
| 493 | + | ||
| 494 | + } | ||
| 495 | + | ||
| 496 | + break; | ||
| 497 | + } | ||
| 498 | + default: | ||
| 499 | + break; | ||
| 500 | + } | ||
| 501 | + | ||
| 502 | + _needsReload = NO; | ||
| 503 | + } | ||
| 504 | + | ||
| 505 | + | ||
| 506 | + [self setPagesAtContentOffset:_scrollView.contentOffset];//根据当前scrollView的offset设置cell | ||
| 507 | + | ||
| 508 | + [self refreshVisibleCellAppearance];//更新各个可见Cell的显示外貌 | ||
| 509 | +} | ||
| 510 | + | ||
| 511 | + | ||
| 512 | +- (PGIndexBannerSubiew *)dequeueReusableCell{ | ||
| 513 | + PGIndexBannerSubiew *cell = [_reusableCells lastObject]; | ||
| 514 | + if (cell) | ||
| 515 | + { | ||
| 516 | + [_reusableCells removeLastObject]; | ||
| 517 | + } | ||
| 518 | + | ||
| 519 | + return cell; | ||
| 520 | +} | ||
| 521 | + | ||
| 522 | +- (void)scrollToPage:(NSUInteger)pageNumber { | ||
| 523 | + if (pageNumber < _pageCount) { | ||
| 524 | + | ||
| 525 | + //首先停止定时器 | ||
| 526 | + [self stopTimer]; | ||
| 527 | + | ||
| 528 | + if (self.isCarousel) { | ||
| 529 | + | ||
| 530 | + self.page = pageNumber + self.orginPageCount; | ||
| 531 | + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startTimer) object:nil]; | ||
| 532 | + [self performSelector:@selector(startTimer) withObject:nil afterDelay:0.5]; | ||
| 533 | + | ||
| 534 | + }else { | ||
| 535 | + self.page = pageNumber; | ||
| 536 | + } | ||
| 537 | + | ||
| 538 | + switch (self.orientation) { | ||
| 539 | + case NewPagedFlowViewOrientationHorizontal: | ||
| 540 | + [_scrollView setContentOffset:CGPointMake(_pageSize.width * self.page, 0) animated:YES]; | ||
| 541 | + break; | ||
| 542 | + case NewPagedFlowViewOrientationVertical: | ||
| 543 | + [_scrollView setContentOffset:CGPointMake(0, _pageSize.height * self.page) animated:YES]; | ||
| 544 | + break; | ||
| 545 | + } | ||
| 546 | + [self setPagesAtContentOffset:_scrollView.contentOffset]; | ||
| 547 | + [self refreshVisibleCellAppearance]; | ||
| 548 | + } | ||
| 549 | +} | ||
| 550 | + | ||
| 551 | +//////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 552 | +#pragma mark - | ||
| 553 | +#pragma mark hitTest | ||
| 554 | + | ||
| 555 | +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { | ||
| 556 | + if ([self pointInside:point withEvent:event]) { | ||
| 557 | + CGPoint newPoint = CGPointZero; | ||
| 558 | + newPoint.x = point.x - _scrollView.frame.origin.x + _scrollView.contentOffset.x; | ||
| 559 | + newPoint.y = point.y - _scrollView.frame.origin.y + _scrollView.contentOffset.y; | ||
| 560 | + if ([_scrollView pointInside:newPoint withEvent:event]) { | ||
| 561 | + return [_scrollView hitTest:newPoint withEvent:event]; | ||
| 562 | + } | ||
| 563 | + | ||
| 564 | + return _scrollView; | ||
| 565 | + } | ||
| 566 | + | ||
| 567 | + return nil; | ||
| 568 | +} | ||
| 569 | + | ||
| 570 | + | ||
| 571 | +#pragma mark - | ||
| 572 | +#pragma mark UIScrollView Delegate | ||
| 573 | + | ||
| 574 | +- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ | ||
| 575 | + | ||
| 576 | + if (self.orginPageCount == 0) { | ||
| 577 | + return; | ||
| 578 | + } | ||
| 579 | + | ||
| 580 | + NSInteger pageIndex; | ||
| 581 | + | ||
| 582 | + switch (self.orientation) { | ||
| 583 | + case NewPagedFlowViewOrientationHorizontal: | ||
| 584 | + pageIndex = (int)round(_scrollView.contentOffset.x / _pageSize.width) % self.orginPageCount; | ||
| 585 | + break; | ||
| 586 | + case NewPagedFlowViewOrientationVertical: | ||
| 587 | + pageIndex = (int)round(_scrollView.contentOffset.y / _pageSize.height) % self.orginPageCount; | ||
| 588 | + break; | ||
| 589 | + default: | ||
| 590 | + break; | ||
| 591 | + } | ||
| 592 | + | ||
| 593 | + if (self.isCarousel) { | ||
| 594 | + | ||
| 595 | + if (self.orginPageCount > 1) { | ||
| 596 | + switch (self.orientation) { | ||
| 597 | + case NewPagedFlowViewOrientationHorizontal: | ||
| 598 | + { | ||
| 599 | + if (scrollView.contentOffset.x / _pageSize.width >= 2 * self.orginPageCount) { | ||
| 600 | + | ||
| 601 | + [scrollView setContentOffset:CGPointMake(_pageSize.width * self.orginPageCount, 0) animated:NO]; | ||
| 602 | + | ||
| 603 | + self.page = self.orginPageCount; | ||
| 604 | + | ||
| 605 | + } | ||
| 606 | + | ||
| 607 | + if (scrollView.contentOffset.x / _pageSize.width <= self.orginPageCount - 1) { | ||
| 608 | + [scrollView setContentOffset:CGPointMake((2 * self.orginPageCount - 1) * _pageSize.width, 0) animated:NO]; | ||
| 609 | + | ||
| 610 | + self.page = 2 * self.orginPageCount; | ||
| 611 | + } | ||
| 612 | + | ||
| 613 | + } | ||
| 614 | + break; | ||
| 615 | + case NewPagedFlowViewOrientationVertical: | ||
| 616 | + { | ||
| 617 | + if (scrollView.contentOffset.y / _pageSize.height >= 2 * self.orginPageCount) { | ||
| 618 | + | ||
| 619 | + [scrollView setContentOffset:CGPointMake(0, _pageSize.height * self.orginPageCount) animated:NO]; | ||
| 620 | + | ||
| 621 | + self.page = self.orginPageCount; | ||
| 622 | + | ||
| 623 | + } | ||
| 624 | + | ||
| 625 | + if (scrollView.contentOffset.y / _pageSize.height <= self.orginPageCount - 1) { | ||
| 626 | + [scrollView setContentOffset:CGPointMake(0, (2 * self.orginPageCount - 1) * _pageSize.height) animated:NO]; | ||
| 627 | + self.page = 2 * self.orginPageCount; | ||
| 628 | + } | ||
| 629 | + | ||
| 630 | + } | ||
| 631 | + break; | ||
| 632 | + default: | ||
| 633 | + break; | ||
| 634 | + } | ||
| 635 | + | ||
| 636 | + | ||
| 637 | + }else { | ||
| 638 | + | ||
| 639 | + pageIndex = 0; | ||
| 640 | + | ||
| 641 | + | ||
| 642 | + } | ||
| 643 | + } | ||
| 644 | + | ||
| 645 | + | ||
| 646 | + [self setPagesAtContentOffset:scrollView.contentOffset]; | ||
| 647 | + [self refreshVisibleCellAppearance]; | ||
| 648 | + | ||
| 649 | + if (self.pageControl && [self.pageControl respondsToSelector:@selector(setCurrentPage:)]) { | ||
| 650 | + | ||
| 651 | + [self.pageControl setCurrentPage:pageIndex]; | ||
| 652 | + } | ||
| 653 | + | ||
| 654 | + if (_delegate && [_delegate respondsToSelector:@selector(didScrollToPage:inFlowView:)] && _currentPageIndex != pageIndex && pageIndex >= 0) { | ||
| 655 | + [_delegate didScrollToPage:pageIndex inFlowView:self]; | ||
| 656 | + } | ||
| 657 | + | ||
| 658 | + _currentPageIndex = pageIndex; | ||
| 659 | +} | ||
| 660 | + | ||
| 661 | +#pragma mark --将要开始拖拽 | ||
| 662 | +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { | ||
| 663 | + [self stopTimer]; | ||
| 664 | +} | ||
| 665 | + | ||
| 666 | +#pragma mark --结束拖拽 | ||
| 667 | +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { | ||
| 668 | + [self startTimer]; | ||
| 669 | +} | ||
| 670 | + | ||
| 671 | +#pragma mark --将要结束拖拽 | ||
| 672 | +- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { | ||
| 673 | + | ||
| 674 | + if (self.orginPageCount > 1 && self.isOpenAutoScroll && self.isCarousel) { | ||
| 675 | + | ||
| 676 | + switch (self.orientation) { | ||
| 677 | + case NewPagedFlowViewOrientationHorizontal: | ||
| 678 | + { | ||
| 679 | + if (self.page == floor(_scrollView.contentOffset.x / _pageSize.width)) { | ||
| 680 | + | ||
| 681 | + self.page = floor(_scrollView.contentOffset.x / _pageSize.width) + 1; | ||
| 682 | + | ||
| 683 | + }else { | ||
| 684 | + | ||
| 685 | + self.page = floor(_scrollView.contentOffset.x / _pageSize.width); | ||
| 686 | + } | ||
| 687 | + } | ||
| 688 | + break; | ||
| 689 | + case NewPagedFlowViewOrientationVertical: | ||
| 690 | + { | ||
| 691 | + if (self.page == floor(_scrollView.contentOffset.y / _pageSize.height)) { | ||
| 692 | + | ||
| 693 | + self.page = floor(_scrollView.contentOffset.y / _pageSize.height) + 1; | ||
| 694 | + | ||
| 695 | + }else { | ||
| 696 | + | ||
| 697 | + self.page = floor(_scrollView.contentOffset.y / _pageSize.height); | ||
| 698 | + } | ||
| 699 | + } | ||
| 700 | + break; | ||
| 701 | + default: | ||
| 702 | + break; | ||
| 703 | + } | ||
| 704 | + | ||
| 705 | + } | ||
| 706 | +} | ||
| 707 | + | ||
| 708 | +//点击了cell | ||
| 709 | +- (void)singleCellTapAction:(NSInteger)selectTag withCell:(PGIndexBannerSubiew *)cell { | ||
| 710 | + | ||
| 711 | + if (self.delegate && [self.delegate respondsToSelector:@selector(didSelectCell:withSubViewIndex:)]) { | ||
| 712 | + | ||
| 713 | + [self.delegate didSelectCell:cell withSubViewIndex:selectTag]; | ||
| 714 | + | ||
| 715 | + } | ||
| 716 | +} | ||
| 717 | + | ||
| 718 | +//解决当父View释放时,当前视图因为被Timer强引用而不能释放的问题 | ||
| 719 | +- (void)willMoveToSuperview:(UIView *)newSuperview { | ||
| 720 | + if (!newSuperview) { | ||
| 721 | + [self stopTimer]; | ||
| 722 | + } | ||
| 723 | +} | ||
| 724 | + | ||
| 725 | +//解决当timer释放后 回调scrollViewDidScroll时访问野指针导致崩溃 | ||
| 726 | +- (void)dealloc { | ||
| 727 | + _scrollView.delegate = nil; | ||
| 728 | +} | ||
| 729 | + | ||
| 730 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/PGIndexBannerSubiew.h
0 → 100755
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/PGIndexBannerSubiew.h | ||
| 1 | +// | ||
| 2 | +// PGIndexBannerSubiew.h | ||
| 3 | +// NewPagedFlowViewDemo | ||
| 4 | +// | ||
| 5 | +// Created by Mars on 16/6/18. | ||
| 6 | +// Copyright © 2016年 Mars. All rights reserved. | ||
| 7 | +// Designed By PageGuo, | ||
| 8 | +// QQ:799573715 | ||
| 9 | +// github:https://github.com/PageGuo/NewPagedFlowView | ||
| 10 | + | ||
| 11 | +/****************************** | ||
| 12 | + | ||
| 13 | + 可以根据自己的需要继承PGIndexBannerSubiew | ||
| 14 | + | ||
| 15 | + ******************************/ | ||
| 16 | + | ||
| 17 | +#import <UIKit/UIKit.h> | ||
| 18 | +#import "CNCollectMoneyCodeView.h" | ||
| 19 | +#import "CNMainView.h" | ||
| 20 | +#import "CNPayMoneyCodeView.h" | ||
| 21 | + | ||
| 22 | +@protocol PGIndexBannerSubiew <NSObject> | ||
| 23 | + | ||
| 24 | +@end | ||
| 25 | + | ||
| 26 | +@interface PGIndexBannerSubiew : UIView <UIScrollViewDelegate,PGIndexBannerSubiew> | ||
| 27 | + | ||
| 28 | +///关联的控制器的view | ||
| 29 | +@property (nonatomic, weak)UIView *associatedVCView; | ||
| 30 | + | ||
| 31 | +///父视图ScrollView | ||
| 32 | +@property (nonatomic, weak)UIScrollView *superScrollView; | ||
| 33 | +///自己的底部ScrollView,用来装载 | ||
| 34 | +@property (nonatomic, strong)UIScrollView *baseScrollView; | ||
| 35 | +@property (nonatomic, strong)CNMainView *mainView; | ||
| 36 | +@property (nonatomic, strong)CNCollectMoneyCodeView *collectMoneyCodeView; | ||
| 37 | +@property (nonatomic, strong)CNPayMoneyCodeView *payMoneyCodeView ; | ||
| 38 | + | ||
| 39 | +@property (nonatomic, copy) void (^didSelectCellBlock)(NSInteger tag, PGIndexBannerSubiew *cell); | ||
| 40 | +/// 设置子控件frame,继承后要重写 | ||
| 41 | +- (void)setSubviewsWithSuperViewBounds:(CGRect)superViewBounds; | ||
| 42 | + | ||
| 43 | +@end |
CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/PGIndexBannerSubiew.m
0 → 100755
| 1 | +++ a/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/PGIndexBannerSubiew.m | ||
| 1 | +// | ||
| 2 | +// PGIndexBannerSubiew.m | ||
| 3 | +// NewPagedFlowViewDemo | ||
| 4 | +// | ||
| 5 | +// Created by Mars on 16/6/18. | ||
| 6 | +// Copyright © 2016年 Mars. All rights reserved. | ||
| 7 | +// Designed By PageGuo, | ||
| 8 | +// QQ:799573715 | ||
| 9 | +// github:https://github.com/PageGuo/NewPagedFlowView | ||
| 10 | + | ||
| 11 | +#import "PGIndexBannerSubiew.h" | ||
| 12 | +#import "WJColorChange.h" | ||
| 13 | +#import "CNTopCollectMoneyRemindView.h" | ||
| 14 | +#import "CNBottomPayMoneyRemindView.h" | ||
| 15 | +#import "CNLiveDigitalRMBHelp.h" | ||
| 16 | + | ||
| 17 | +#import<CNLiveCommonCategory/UIColor+CNLiveExtension.h> | ||
| 18 | +#import<YYCategories/YYCategories.h> | ||
| 19 | + | ||
| 20 | +@interface PGIndexBannerSubiew()<WJColorChangeDelegate> | ||
| 21 | + | ||
| 22 | +@property (nonatomic,strong) WJColorChange *colorChange; | ||
| 23 | +@property (nonatomic,strong) NSMutableArray *colorDataArr; | ||
| 24 | +///付款上拉显示提醒 | ||
| 25 | +@property (nonatomic,strong) CNBottomPayMoneyRemindView *bottomPayMoneyRemindView; | ||
| 26 | +///收钱下拉显示提醒 | ||
| 27 | +@property (nonatomic,strong) CNTopCollectMoneyRemindView *topCollectMoneyRemindView; | ||
| 28 | + | ||
| 29 | + | ||
| 30 | +@end | ||
| 31 | + | ||
| 32 | +@implementation PGIndexBannerSubiew | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +- (instancetype)initWithFrame:(CGRect)frame { | ||
| 36 | + | ||
| 37 | + self = [super initWithFrame:frame]; | ||
| 38 | + | ||
| 39 | + if (self) { | ||
| 40 | + | ||
| 41 | + [self addSubview:self.baseScrollView]; | ||
| 42 | + [self.baseScrollView addSubview:self.collectMoneyCodeView]; | ||
| 43 | + [self.baseScrollView addSubview:self.mainView]; | ||
| 44 | + [self.baseScrollView addSubview:self.payMoneyCodeView]; | ||
| 45 | + [self.baseScrollView addSubview:self.bottomPayMoneyRemindView]; | ||
| 46 | + [self.baseScrollView addSubview:self.topCollectMoneyRemindView]; | ||
| 47 | + | ||
| 48 | + //默认偏移到中间 | ||
| 49 | + [self.baseScrollView setContentOffset:CGPointMake(0, self.frame.size.height)]; | ||
| 50 | + | ||
| 51 | + UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleCellTapAction:)]; | ||
| 52 | + [self addGestureRecognizer:singleTap]; | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + return self; | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +- (void)singleCellTapAction:(UIGestureRecognizer *)gesture { | ||
| 62 | + if (self.didSelectCellBlock) { | ||
| 63 | + self.didSelectCellBlock(self.tag, self); | ||
| 64 | + } | ||
| 65 | +} | ||
| 66 | +- (void)panAction:(UIPanGestureRecognizer *)panGestureRecognizer | ||
| 67 | +{ | ||
| 68 | + NSLog(@"滑动啦"); | ||
| 69 | +} | ||
| 70 | +- (void)setSubviewsWithSuperViewBounds:(CGRect)superViewBounds { | ||
| 71 | + | ||
| 72 | +// if (CGRectEqualToRect(self.mainImageView.frame, superViewBounds)) { | ||
| 73 | +// return; | ||
| 74 | +// } | ||
| 75 | + | ||
| 76 | +// self.mainImageView.frame = superViewBounds; | ||
| 77 | +// self.coverView.frame = superViewBounds; | ||
| 78 | +} | ||
| 79 | +#pragma mark - UIScrollViewDelegate | ||
| 80 | +/** | ||
| 81 | + 滚动时候回调 传出当前的滚动视图 | ||
| 82 | + @param scrollView 滚动视图 | ||
| 83 | + */ | ||
| 84 | +- (void)WJColorScrollViewScroll:(UIScrollView *)scrollView; | ||
| 85 | +{ | ||
| 86 | + NSInteger tag = self.tag; | ||
| 87 | + CGFloat defaultOffset = self.frame.size.height; | ||
| 88 | + | ||
| 89 | + CGFloat currentOffset = scrollView.contentOffset.y; | ||
| 90 | + | ||
| 91 | + /**隐藏左右view*/ | ||
| 92 | + CGFloat fabsOffset = fabs(defaultOffset - currentOffset); | ||
| 93 | + | ||
| 94 | + UIView *leftView = [self.superScrollView viewWithTag:tag-1]; | ||
| 95 | + UIView *rightView = [self.superScrollView viewWithTag:tag+1]; | ||
| 96 | + if (fabsOffset > 70) { | ||
| 97 | + leftView.alpha = 0; | ||
| 98 | + rightView.alpha = 0; | ||
| 99 | + } | ||
| 100 | + else{ | ||
| 101 | + leftView.alpha = (70-fabsOffset)/70.00; | ||
| 102 | + rightView.alpha = (70-fabsOffset)/70.00; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + //上滑滑动到临近值,让bottomPayMoneyRemindView位置一直停留在底部,并慢慢消失 | ||
| 106 | + CGFloat bottomPayMoneyRemindViewMaxOffset = self.baseScrollView.height+self.bottomPayMoneyRemindView.height; | ||
| 107 | + if (currentOffset > bottomPayMoneyRemindViewMaxOffset) { | ||
| 108 | + /**让bottomPayMoneyRemindView位置一直停留在底部*/ | ||
| 109 | + self.bottomPayMoneyRemindView.top = currentOffset+self.baseScrollView.height-self.bottomPayMoneyRemindView.height; | ||
| 110 | + | ||
| 111 | + /**渐渐隐藏bottomPayMoneyRemindView,缓冲距离为40*/ | ||
| 112 | + self.bottomPayMoneyRemindView.alpha = (40-(currentOffset - bottomPayMoneyRemindViewMaxOffset))/40.00; | ||
| 113 | + | ||
| 114 | + [self.bottomPayMoneyRemindView setNeedsLayout]; | ||
| 115 | + [self.bottomPayMoneyRemindView layoutIfNeeded]; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + | ||
| 119 | + //下滑滑动到临近值,让topCollectMoneyRemindView位置一直停留在底部,并慢慢消失 | ||
| 120 | + CGFloat topCollectMoneyRemindViewMinOffset = self.baseScrollView.height-self.topCollectMoneyRemindView.height; | ||
| 121 | + if (currentOffset < topCollectMoneyRemindViewMinOffset) { | ||
| 122 | + /**让topCollectMoneyRemindView位置一直停留在底部*/ | ||
| 123 | + self.topCollectMoneyRemindView.bottom = currentOffset+self.topCollectMoneyRemindView.height; | ||
| 124 | + | ||
| 125 | + /**渐渐隐藏topCollectMoneyRemindView,缓冲距离为40*/ | ||
| 126 | + NSLog(@"currentOffset = %f",topCollectMoneyRemindViewMinOffset - currentOffset); | ||
| 127 | + self.topCollectMoneyRemindView.alpha = (40-(topCollectMoneyRemindViewMinOffset - currentOffset))/40.00; | ||
| 128 | + | ||
| 129 | + [self.topCollectMoneyRemindView setNeedsLayout]; | ||
| 130 | + [self.topCollectMoneyRemindView layoutIfNeeded]; | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + | ||
| 134 | + | ||
| 135 | + CGFloat mainViewOffset = fabs(currentOffset - self.baseScrollView.height); | ||
| 136 | + /**控制缩放范围在一定范围*/ | ||
| 137 | + if (mainViewOffset < 100) { | ||
| 138 | + CGFloat scale = 1; | ||
| 139 | + | ||
| 140 | + if (currentOffset < self.baseScrollView.height) { | ||
| 141 | + //下滑时,计算scale方法 | ||
| 142 | + scale = currentOffset/self.baseScrollView.height; | ||
| 143 | + } | ||
| 144 | + else //上滑时,计算scale方法 | ||
| 145 | + scale = self.baseScrollView.height/currentOffset; | ||
| 146 | + | ||
| 147 | + [self.mainView scaledView:scale]; | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + | ||
| 151 | + | ||
| 152 | + | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +/** | ||
| 156 | + 滚动结束时候回调 | ||
| 157 | + @param scrollView 滚动视图 | ||
| 158 | + */ | ||
| 159 | +- (void)WJColorEndScroll:(UIScrollView *)scrollView; | ||
| 160 | +{ | ||
| 161 | + CGFloat defaultOffset = self.frame.size.height; | ||
| 162 | + | ||
| 163 | + CGFloat currentOffset = scrollView.contentOffset.y; | ||
| 164 | + | ||
| 165 | + if ((currentOffset < (defaultOffset + 1)) && | ||
| 166 | + (currentOffset > (defaultOffset - 1)) | ||
| 167 | + ) { | ||
| 168 | + self.superScrollView.scrollEnabled = YES; | ||
| 169 | + } | ||
| 170 | + else | ||
| 171 | + self.superScrollView.scrollEnabled = NO; | ||
| 172 | +} | ||
| 173 | +#pragma mark - Setter方法 | ||
| 174 | +- (void)setAssociatedVCView:(UIView *)associatedVCView | ||
| 175 | +{ | ||
| 176 | + _associatedVCView = associatedVCView; | ||
| 177 | + | ||
| 178 | + self.colorChange = [[WJColorChange alloc]initWithType:SingleColor]; | ||
| 179 | + self.colorChange.delegate = self; | ||
| 180 | + self.colorChange.offset = 100; | ||
| 181 | + [self.colorChange settingScrollView:self.baseScrollView colorArray:self.colorDataArr needChangeColorView:associatedVCView]; | ||
| 182 | + | ||
| 183 | +} | ||
| 184 | +#pragma mark - Lazy | ||
| 185 | +- (UIScrollView *)baseScrollView | ||
| 186 | +{ | ||
| 187 | + if (_baseScrollView == nil) { | ||
| 188 | + _baseScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; | ||
| 189 | + _baseScrollView.contentSize = CGSizeMake(self.frame.size.width, self.frame.size.height*3); | ||
| 190 | + _baseScrollView.delegate = self; | ||
| 191 | + _baseScrollView.bounces = NO; | ||
| 192 | + _baseScrollView.pagingEnabled = YES; | ||
| 193 | + _baseScrollView.clipsToBounds = NO; | ||
| 194 | + _baseScrollView.showsHorizontalScrollIndicator = NO; | ||
| 195 | + _baseScrollView.showsVerticalScrollIndicator = NO; | ||
| 196 | + if (@available(iOS 11.0, *)) { | ||
| 197 | + _baseScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; | ||
| 198 | + } else { | ||
| 199 | + _baseScrollView.automaticallyAdjustsScrollIndicatorInsets = NO; | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + | ||
| 203 | + } | ||
| 204 | + return _baseScrollView; | ||
| 205 | +} | ||
| 206 | +- (CNCollectMoneyCodeView *)collectMoneyCodeView | ||
| 207 | +{ | ||
| 208 | + if (_collectMoneyCodeView == nil) { | ||
| 209 | + _collectMoneyCodeView = [[CNCollectMoneyCodeView alloc] initWithFrame:CGRectMake(-25, 0, self.frame.size.width + 50, self.frame.size.height)]; | ||
| 210 | + } | ||
| 211 | + return _collectMoneyCodeView; | ||
| 212 | +} | ||
| 213 | + | ||
| 214 | +- (CNMainView *)mainView | ||
| 215 | +{ | ||
| 216 | + if (_mainView == nil) { | ||
| 217 | + CGFloat W = self.frame.size.width; | ||
| 218 | + CGFloat H = W*1.5; | ||
| 219 | + _mainView = [[CNMainView alloc] initWithFrame:CGRectMake(0, self.frame.size.height + (self.frame.size.height-H)/2,W, H)]; | ||
| 220 | + } | ||
| 221 | + return _mainView; | ||
| 222 | +} | ||
| 223 | +- (CNPayMoneyCodeView *)payMoneyCodeView | ||
| 224 | +{ | ||
| 225 | + if (_payMoneyCodeView == nil) { | ||
| 226 | + _payMoneyCodeView = [[CNPayMoneyCodeView alloc] initWithFrame:CGRectMake(-25, self.frame.size.height*2 + 150,self.frame.size.width+50, self.frame.size.height - 150)]; | ||
| 227 | + } | ||
| 228 | + return _payMoneyCodeView; | ||
| 229 | +} | ||
| 230 | + | ||
| 231 | +- (NSMutableArray *)colorDataArr { | ||
| 232 | + | ||
| 233 | + if (!_colorDataArr) { | ||
| 234 | + _colorDataArr = [[NSMutableArray alloc]init]; | ||
| 235 | + NSArray *colorArr = @[[UIColor blackColor],[UIColor whiteColor],[UIColor redColor]]; | ||
| 236 | + | ||
| 237 | + [_colorDataArr addObjectsFromArray:colorArr]; | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + return _colorDataArr; | ||
| 241 | +} | ||
| 242 | +- (CNBottomPayMoneyRemindView *)bottomPayMoneyRemindView | ||
| 243 | +{ | ||
| 244 | + if (_bottomPayMoneyRemindView == nil) { | ||
| 245 | + CGFloat W = kScreenWidth-100; | ||
| 246 | + CNBottomPayMoneyRemindView *bottomView = [[CNBottomPayMoneyRemindView alloc] initWithFrame:CGRectMake(25, self.baseScrollView.height*2, W,W/2)]; | ||
| 247 | + bottomView.backgroundColor = [UIColor clearColor]; | ||
| 248 | + _bottomPayMoneyRemindView = bottomView; | ||
| 249 | + } | ||
| 250 | + return _bottomPayMoneyRemindView; | ||
| 251 | +} | ||
| 252 | +- (CNTopCollectMoneyRemindView *)topCollectMoneyRemindView | ||
| 253 | +{ | ||
| 254 | + if (_topCollectMoneyRemindView == nil) { | ||
| 255 | + CGFloat W = kScreenWidth-100; | ||
| 256 | + CNTopCollectMoneyRemindView *topView = [[CNTopCollectMoneyRemindView alloc] initWithFrame:CGRectMake(25, self.baseScrollView.height-W/2, W,W/2)]; | ||
| 257 | + topView.backgroundColor = [UIColor clearColor]; | ||
| 258 | + _topCollectMoneyRemindView = topView; | ||
| 259 | + } | ||
| 260 | + return _topCollectMoneyRemindView; | ||
| 261 | +} | ||
| 262 | +@end |
Example/CNLiveDigitalRMBHomeDeom.xcodeproj/project.pbxproj
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom.xcodeproj/project.pbxproj | ||
| 1 | +// !$*UTF8*$! | ||
| 2 | +{ | ||
| 3 | + archiveVersion = 1; | ||
| 4 | + classes = { | ||
| 5 | + }; | ||
| 6 | + objectVersion = 46; | ||
| 7 | + objects = { | ||
| 8 | + | ||
| 9 | +/* Begin PBXBuildFile section */ | ||
| 10 | + 0D4E5ACE61C2F2516DCF6768 /* Pods_CNLiveDigitalRMBHomeDeom_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 760E45188C9A5893DDC6FACC /* Pods_CNLiveDigitalRMBHomeDeom_Example.framework */; }; | ||
| 11 | + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; | ||
| 12 | + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; | ||
| 13 | + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; | ||
| 14 | + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; | ||
| 15 | + 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; | ||
| 16 | + 6003F59E195388D20070C39A /* CNLIVEAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* CNLIVEAppDelegate.m */; }; | ||
| 17 | + 6003F5A7195388D20070C39A /* CNLIVEViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* CNLIVEViewController.m */; }; | ||
| 18 | + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; | ||
| 19 | + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; | ||
| 20 | + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; | ||
| 21 | + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; | ||
| 22 | + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; | ||
| 23 | + 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; | ||
| 24 | + 693356EB098A15D18B7ABC70 /* Pods_CNLiveDigitalRMBHomeDeom_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB6DEBBBA7FEADA176CB9EBC /* Pods_CNLiveDigitalRMBHomeDeom_Tests.framework */; }; | ||
| 25 | + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; }; | ||
| 26 | + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; | ||
| 27 | +/* End PBXBuildFile section */ | ||
| 28 | + | ||
| 29 | +/* Begin PBXContainerItemProxy section */ | ||
| 30 | + 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { | ||
| 31 | + isa = PBXContainerItemProxy; | ||
| 32 | + containerPortal = 6003F582195388D10070C39A /* Project object */; | ||
| 33 | + proxyType = 1; | ||
| 34 | + remoteGlobalIDString = 6003F589195388D20070C39A; | ||
| 35 | + remoteInfo = CNLiveDigitalRMBHomeDeom; | ||
| 36 | + }; | ||
| 37 | +/* End PBXContainerItemProxy section */ | ||
| 38 | + | ||
| 39 | +/* Begin PBXFileReference section */ | ||
| 40 | + 22D8A77BFDF45E1D297DEB1B /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; }; | ||
| 41 | + 52F196DE2B3FB64955E7215B /* Pods-CNLiveDigitalRMBHomeDeom_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveDigitalRMBHomeDeom_Tests.debug.xcconfig"; path = "Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Tests/Pods-CNLiveDigitalRMBHomeDeom_Tests.debug.xcconfig"; sourceTree = "<group>"; }; | ||
| 42 | + 5E6E3E09C7DC0CAAF4C6B1B0 /* Pods-CNLiveDigitalRMBHomeDeom_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveDigitalRMBHomeDeom_Example.debug.xcconfig"; path = "Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Example/Pods-CNLiveDigitalRMBHomeDeom_Example.debug.xcconfig"; sourceTree = "<group>"; }; | ||
| 43 | + 6003F58A195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CNLiveDigitalRMBHomeDeom_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 44 | + 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; | ||
| 45 | + 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; | ||
| 46 | + 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; | ||
| 47 | + 6003F595195388D20070C39A /* CNLiveDigitalRMBHomeDeom-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CNLiveDigitalRMBHomeDeom-Info.plist"; sourceTree = "<group>"; }; | ||
| 48 | + 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | ||
| 49 | + 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | ||
| 50 | + 6003F59B195388D20070C39A /* CNLiveDigitalRMBHomeDeom-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CNLiveDigitalRMBHomeDeom-Prefix.pch"; sourceTree = "<group>"; }; | ||
| 51 | + 6003F59C195388D20070C39A /* CNLIVEAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNLIVEAppDelegate.h; sourceTree = "<group>"; }; | ||
| 52 | + 6003F59D195388D20070C39A /* CNLIVEAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CNLIVEAppDelegate.m; sourceTree = "<group>"; }; | ||
| 53 | + 6003F5A5195388D20070C39A /* CNLIVEViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNLIVEViewController.h; sourceTree = "<group>"; }; | ||
| 54 | + 6003F5A6195388D20070C39A /* CNLIVEViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CNLIVEViewController.m; sourceTree = "<group>"; }; | ||
| 55 | + 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; | ||
| 56 | + 6003F5AE195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CNLiveDigitalRMBHomeDeom_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 57 | + 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; | ||
| 58 | + 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = "<group>"; }; | ||
| 59 | + 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | ||
| 60 | + 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; }; | ||
| 61 | + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = "<group>"; }; | ||
| 62 | + 71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||
| 63 | + 760E45188C9A5893DDC6FACC /* Pods_CNLiveDigitalRMBHomeDeom_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CNLiveDigitalRMBHomeDeom_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 64 | + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; | ||
| 65 | + 8E2A33CDF8C03B301BA3EF0F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; }; | ||
| 66 | + A1901DAA9DA3F13A4649B749 /* CNLiveDigitalRMBHomeDeom.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLiveDigitalRMBHomeDeom.podspec; path = ../CNLiveDigitalRMBHomeDeom.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; | ||
| 67 | + CB6DEBBBA7FEADA176CB9EBC /* Pods_CNLiveDigitalRMBHomeDeom_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CNLiveDigitalRMBHomeDeom_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 68 | + EFC1B7BC2C4290D50063222D /* Pods-CNLiveDigitalRMBHomeDeom_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveDigitalRMBHomeDeom_Tests.release.xcconfig"; path = "Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Tests/Pods-CNLiveDigitalRMBHomeDeom_Tests.release.xcconfig"; sourceTree = "<group>"; }; | ||
| 69 | + F99383892248203A26F9A2CF /* Pods-CNLiveDigitalRMBHomeDeom_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveDigitalRMBHomeDeom_Example.release.xcconfig"; path = "Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Example/Pods-CNLiveDigitalRMBHomeDeom_Example.release.xcconfig"; sourceTree = "<group>"; }; | ||
| 70 | +/* End PBXFileReference section */ | ||
| 71 | + | ||
| 72 | +/* Begin PBXFrameworksBuildPhase section */ | ||
| 73 | + 6003F587195388D20070C39A /* Frameworks */ = { | ||
| 74 | + isa = PBXFrameworksBuildPhase; | ||
| 75 | + buildActionMask = 2147483647; | ||
| 76 | + files = ( | ||
| 77 | + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, | ||
| 78 | + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, | ||
| 79 | + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, | ||
| 80 | + 0D4E5ACE61C2F2516DCF6768 /* Pods_CNLiveDigitalRMBHomeDeom_Example.framework in Frameworks */, | ||
| 81 | + ); | ||
| 82 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 83 | + }; | ||
| 84 | + 6003F5AB195388D20070C39A /* Frameworks */ = { | ||
| 85 | + isa = PBXFrameworksBuildPhase; | ||
| 86 | + buildActionMask = 2147483647; | ||
| 87 | + files = ( | ||
| 88 | + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, | ||
| 89 | + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, | ||
| 90 | + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, | ||
| 91 | + 693356EB098A15D18B7ABC70 /* Pods_CNLiveDigitalRMBHomeDeom_Tests.framework in Frameworks */, | ||
| 92 | + ); | ||
| 93 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 94 | + }; | ||
| 95 | +/* End PBXFrameworksBuildPhase section */ | ||
| 96 | + | ||
| 97 | +/* Begin PBXGroup section */ | ||
| 98 | + 6003F581195388D10070C39A = { | ||
| 99 | + isa = PBXGroup; | ||
| 100 | + children = ( | ||
| 101 | + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, | ||
| 102 | + 6003F593195388D20070C39A /* Example for CNLiveDigitalRMBHomeDeom */, | ||
| 103 | + 6003F5B5195388D20070C39A /* Tests */, | ||
| 104 | + 6003F58C195388D20070C39A /* Frameworks */, | ||
| 105 | + 6003F58B195388D20070C39A /* Products */, | ||
| 106 | + F6ABFBDBA1C67E0A06C63A4F /* Pods */, | ||
| 107 | + ); | ||
| 108 | + sourceTree = "<group>"; | ||
| 109 | + }; | ||
| 110 | + 6003F58B195388D20070C39A /* Products */ = { | ||
| 111 | + isa = PBXGroup; | ||
| 112 | + children = ( | ||
| 113 | + 6003F58A195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example.app */, | ||
| 114 | + 6003F5AE195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Tests.xctest */, | ||
| 115 | + ); | ||
| 116 | + name = Products; | ||
| 117 | + sourceTree = "<group>"; | ||
| 118 | + }; | ||
| 119 | + 6003F58C195388D20070C39A /* Frameworks */ = { | ||
| 120 | + isa = PBXGroup; | ||
| 121 | + children = ( | ||
| 122 | + 6003F58D195388D20070C39A /* Foundation.framework */, | ||
| 123 | + 6003F58F195388D20070C39A /* CoreGraphics.framework */, | ||
| 124 | + 6003F591195388D20070C39A /* UIKit.framework */, | ||
| 125 | + 6003F5AF195388D20070C39A /* XCTest.framework */, | ||
| 126 | + 760E45188C9A5893DDC6FACC /* Pods_CNLiveDigitalRMBHomeDeom_Example.framework */, | ||
| 127 | + CB6DEBBBA7FEADA176CB9EBC /* Pods_CNLiveDigitalRMBHomeDeom_Tests.framework */, | ||
| 128 | + ); | ||
| 129 | + name = Frameworks; | ||
| 130 | + sourceTree = "<group>"; | ||
| 131 | + }; | ||
| 132 | + 6003F593195388D20070C39A /* Example for CNLiveDigitalRMBHomeDeom */ = { | ||
| 133 | + isa = PBXGroup; | ||
| 134 | + children = ( | ||
| 135 | + 6003F59C195388D20070C39A /* CNLIVEAppDelegate.h */, | ||
| 136 | + 6003F59D195388D20070C39A /* CNLIVEAppDelegate.m */, | ||
| 137 | + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */, | ||
| 138 | + 6003F5A5195388D20070C39A /* CNLIVEViewController.h */, | ||
| 139 | + 6003F5A6195388D20070C39A /* CNLIVEViewController.m */, | ||
| 140 | + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */, | ||
| 141 | + 6003F5A8195388D20070C39A /* Images.xcassets */, | ||
| 142 | + 6003F594195388D20070C39A /* Supporting Files */, | ||
| 143 | + ); | ||
| 144 | + name = "Example for CNLiveDigitalRMBHomeDeom"; | ||
| 145 | + path = CNLiveDigitalRMBHomeDeom; | ||
| 146 | + sourceTree = "<group>"; | ||
| 147 | + }; | ||
| 148 | + 6003F594195388D20070C39A /* Supporting Files */ = { | ||
| 149 | + isa = PBXGroup; | ||
| 150 | + children = ( | ||
| 151 | + 6003F595195388D20070C39A /* CNLiveDigitalRMBHomeDeom-Info.plist */, | ||
| 152 | + 6003F596195388D20070C39A /* InfoPlist.strings */, | ||
| 153 | + 6003F599195388D20070C39A /* main.m */, | ||
| 154 | + 6003F59B195388D20070C39A /* CNLiveDigitalRMBHomeDeom-Prefix.pch */, | ||
| 155 | + ); | ||
| 156 | + name = "Supporting Files"; | ||
| 157 | + sourceTree = "<group>"; | ||
| 158 | + }; | ||
| 159 | + 6003F5B5195388D20070C39A /* Tests */ = { | ||
| 160 | + isa = PBXGroup; | ||
| 161 | + children = ( | ||
| 162 | + 6003F5BB195388D20070C39A /* Tests.m */, | ||
| 163 | + 6003F5B6195388D20070C39A /* Supporting Files */, | ||
| 164 | + ); | ||
| 165 | + path = Tests; | ||
| 166 | + sourceTree = "<group>"; | ||
| 167 | + }; | ||
| 168 | + 6003F5B6195388D20070C39A /* Supporting Files */ = { | ||
| 169 | + isa = PBXGroup; | ||
| 170 | + children = ( | ||
| 171 | + 6003F5B7195388D20070C39A /* Tests-Info.plist */, | ||
| 172 | + 6003F5B8195388D20070C39A /* InfoPlist.strings */, | ||
| 173 | + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, | ||
| 174 | + ); | ||
| 175 | + name = "Supporting Files"; | ||
| 176 | + sourceTree = "<group>"; | ||
| 177 | + }; | ||
| 178 | + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { | ||
| 179 | + isa = PBXGroup; | ||
| 180 | + children = ( | ||
| 181 | + A1901DAA9DA3F13A4649B749 /* CNLiveDigitalRMBHomeDeom.podspec */, | ||
| 182 | + 22D8A77BFDF45E1D297DEB1B /* README.md */, | ||
| 183 | + 8E2A33CDF8C03B301BA3EF0F /* LICENSE */, | ||
| 184 | + ); | ||
| 185 | + name = "Podspec Metadata"; | ||
| 186 | + sourceTree = "<group>"; | ||
| 187 | + }; | ||
| 188 | + F6ABFBDBA1C67E0A06C63A4F /* Pods */ = { | ||
| 189 | + isa = PBXGroup; | ||
| 190 | + children = ( | ||
| 191 | + 5E6E3E09C7DC0CAAF4C6B1B0 /* Pods-CNLiveDigitalRMBHomeDeom_Example.debug.xcconfig */, | ||
| 192 | + F99383892248203A26F9A2CF /* Pods-CNLiveDigitalRMBHomeDeom_Example.release.xcconfig */, | ||
| 193 | + 52F196DE2B3FB64955E7215B /* Pods-CNLiveDigitalRMBHomeDeom_Tests.debug.xcconfig */, | ||
| 194 | + EFC1B7BC2C4290D50063222D /* Pods-CNLiveDigitalRMBHomeDeom_Tests.release.xcconfig */, | ||
| 195 | + ); | ||
| 196 | + path = Pods; | ||
| 197 | + sourceTree = "<group>"; | ||
| 198 | + }; | ||
| 199 | +/* End PBXGroup section */ | ||
| 200 | + | ||
| 201 | +/* Begin PBXNativeTarget section */ | ||
| 202 | + 6003F589195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example */ = { | ||
| 203 | + isa = PBXNativeTarget; | ||
| 204 | + buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveDigitalRMBHomeDeom_Example" */; | ||
| 205 | + buildPhases = ( | ||
| 206 | + 6F5A9B98CE9D8ECD0558E4CD /* [CP] Check Pods Manifest.lock */, | ||
| 207 | + 6003F586195388D20070C39A /* Sources */, | ||
| 208 | + 6003F587195388D20070C39A /* Frameworks */, | ||
| 209 | + 6003F588195388D20070C39A /* Resources */, | ||
| 210 | + B2E579DE39DF0B4ECA4D3E28 /* [CP] Embed Pods Frameworks */, | ||
| 211 | + ); | ||
| 212 | + buildRules = ( | ||
| 213 | + ); | ||
| 214 | + dependencies = ( | ||
| 215 | + ); | ||
| 216 | + name = CNLiveDigitalRMBHomeDeom_Example; | ||
| 217 | + productName = CNLiveDigitalRMBHomeDeom; | ||
| 218 | + productReference = 6003F58A195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example.app */; | ||
| 219 | + productType = "com.apple.product-type.application"; | ||
| 220 | + }; | ||
| 221 | + 6003F5AD195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Tests */ = { | ||
| 222 | + isa = PBXNativeTarget; | ||
| 223 | + buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveDigitalRMBHomeDeom_Tests" */; | ||
| 224 | + buildPhases = ( | ||
| 225 | + 608CDDF7411A62AAD807D870 /* [CP] Check Pods Manifest.lock */, | ||
| 226 | + 6003F5AA195388D20070C39A /* Sources */, | ||
| 227 | + 6003F5AB195388D20070C39A /* Frameworks */, | ||
| 228 | + 6003F5AC195388D20070C39A /* Resources */, | ||
| 229 | + ); | ||
| 230 | + buildRules = ( | ||
| 231 | + ); | ||
| 232 | + dependencies = ( | ||
| 233 | + 6003F5B4195388D20070C39A /* PBXTargetDependency */, | ||
| 234 | + ); | ||
| 235 | + name = CNLiveDigitalRMBHomeDeom_Tests; | ||
| 236 | + productName = CNLiveDigitalRMBHomeDeomTests; | ||
| 237 | + productReference = 6003F5AE195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Tests.xctest */; | ||
| 238 | + productType = "com.apple.product-type.bundle.unit-test"; | ||
| 239 | + }; | ||
| 240 | +/* End PBXNativeTarget section */ | ||
| 241 | + | ||
| 242 | +/* Begin PBXProject section */ | ||
| 243 | + 6003F582195388D10070C39A /* Project object */ = { | ||
| 244 | + isa = PBXProject; | ||
| 245 | + attributes = { | ||
| 246 | + CLASSPREFIX = CNLIVE; | ||
| 247 | + LastUpgradeCheck = 1320; | ||
| 248 | + ORGANIZATIONNAME = daojian; | ||
| 249 | + TargetAttributes = { | ||
| 250 | + 6003F589195388D20070C39A = { | ||
| 251 | + DevelopmentTeam = 94X49GG3ZW; | ||
| 252 | + }; | ||
| 253 | + 6003F5AD195388D20070C39A = { | ||
| 254 | + TestTargetID = 6003F589195388D20070C39A; | ||
| 255 | + }; | ||
| 256 | + }; | ||
| 257 | + }; | ||
| 258 | + buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "CNLiveDigitalRMBHomeDeom" */; | ||
| 259 | + compatibilityVersion = "Xcode 3.2"; | ||
| 260 | + developmentRegion = English; | ||
| 261 | + hasScannedForEncodings = 0; | ||
| 262 | + knownRegions = ( | ||
| 263 | + English, | ||
| 264 | + en, | ||
| 265 | + Base, | ||
| 266 | + ); | ||
| 267 | + mainGroup = 6003F581195388D10070C39A; | ||
| 268 | + productRefGroup = 6003F58B195388D20070C39A /* Products */; | ||
| 269 | + projectDirPath = ""; | ||
| 270 | + projectRoot = ""; | ||
| 271 | + targets = ( | ||
| 272 | + 6003F589195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example */, | ||
| 273 | + 6003F5AD195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Tests */, | ||
| 274 | + ); | ||
| 275 | + }; | ||
| 276 | +/* End PBXProject section */ | ||
| 277 | + | ||
| 278 | +/* Begin PBXResourcesBuildPhase section */ | ||
| 279 | + 6003F588195388D20070C39A /* Resources */ = { | ||
| 280 | + isa = PBXResourcesBuildPhase; | ||
| 281 | + buildActionMask = 2147483647; | ||
| 282 | + files = ( | ||
| 283 | + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */, | ||
| 284 | + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */, | ||
| 285 | + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, | ||
| 286 | + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, | ||
| 287 | + ); | ||
| 288 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 289 | + }; | ||
| 290 | + 6003F5AC195388D20070C39A /* Resources */ = { | ||
| 291 | + isa = PBXResourcesBuildPhase; | ||
| 292 | + buildActionMask = 2147483647; | ||
| 293 | + files = ( | ||
| 294 | + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, | ||
| 295 | + ); | ||
| 296 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 297 | + }; | ||
| 298 | +/* End PBXResourcesBuildPhase section */ | ||
| 299 | + | ||
| 300 | +/* Begin PBXShellScriptBuildPhase section */ | ||
| 301 | + 608CDDF7411A62AAD807D870 /* [CP] Check Pods Manifest.lock */ = { | ||
| 302 | + isa = PBXShellScriptBuildPhase; | ||
| 303 | + buildActionMask = 2147483647; | ||
| 304 | + files = ( | ||
| 305 | + ); | ||
| 306 | + inputFileListPaths = ( | ||
| 307 | + ); | ||
| 308 | + inputPaths = ( | ||
| 309 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||
| 310 | + "${PODS_ROOT}/Manifest.lock", | ||
| 311 | + ); | ||
| 312 | + name = "[CP] Check Pods Manifest.lock"; | ||
| 313 | + outputFileListPaths = ( | ||
| 314 | + ); | ||
| 315 | + outputPaths = ( | ||
| 316 | + "$(DERIVED_FILE_DIR)/Pods-CNLiveDigitalRMBHomeDeom_Tests-checkManifestLockResult.txt", | ||
| 317 | + ); | ||
| 318 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 319 | + shellPath = /bin/sh; | ||
| 320 | + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||
| 321 | + showEnvVarsInLog = 0; | ||
| 322 | + }; | ||
| 323 | + 6F5A9B98CE9D8ECD0558E4CD /* [CP] Check Pods Manifest.lock */ = { | ||
| 324 | + isa = PBXShellScriptBuildPhase; | ||
| 325 | + buildActionMask = 2147483647; | ||
| 326 | + files = ( | ||
| 327 | + ); | ||
| 328 | + inputFileListPaths = ( | ||
| 329 | + ); | ||
| 330 | + inputPaths = ( | ||
| 331 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||
| 332 | + "${PODS_ROOT}/Manifest.lock", | ||
| 333 | + ); | ||
| 334 | + name = "[CP] Check Pods Manifest.lock"; | ||
| 335 | + outputFileListPaths = ( | ||
| 336 | + ); | ||
| 337 | + outputPaths = ( | ||
| 338 | + "$(DERIVED_FILE_DIR)/Pods-CNLiveDigitalRMBHomeDeom_Example-checkManifestLockResult.txt", | ||
| 339 | + ); | ||
| 340 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 341 | + shellPath = /bin/sh; | ||
| 342 | + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||
| 343 | + showEnvVarsInLog = 0; | ||
| 344 | + }; | ||
| 345 | + B2E579DE39DF0B4ECA4D3E28 /* [CP] Embed Pods Frameworks */ = { | ||
| 346 | + isa = PBXShellScriptBuildPhase; | ||
| 347 | + buildActionMask = 2147483647; | ||
| 348 | + files = ( | ||
| 349 | + ); | ||
| 350 | + inputPaths = ( | ||
| 351 | + "${PODS_ROOT}/Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Example/Pods-CNLiveDigitalRMBHomeDeom_Example-frameworks.sh", | ||
| 352 | + "${BUILT_PRODUCTS_DIR}/CNLiveCommonCategory/CNLiveCommonCategory.framework", | ||
| 353 | + "${BUILT_PRODUCTS_DIR}/CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom.framework", | ||
| 354 | + "${BUILT_PRODUCTS_DIR}/CNLiveNewTripartiteManagement/CNLiveNewTripartiteManagement.framework", | ||
| 355 | + "${BUILT_PRODUCTS_DIR}/YYCategories/YYCategories.framework", | ||
| 356 | + ); | ||
| 357 | + name = "[CP] Embed Pods Frameworks"; | ||
| 358 | + outputPaths = ( | ||
| 359 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCommonCategory.framework", | ||
| 360 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveDigitalRMBHomeDeom.framework", | ||
| 361 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveNewTripartiteManagement.framework", | ||
| 362 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYCategories.framework", | ||
| 363 | + ); | ||
| 364 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 365 | + shellPath = /bin/sh; | ||
| 366 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CNLiveDigitalRMBHomeDeom_Example/Pods-CNLiveDigitalRMBHomeDeom_Example-frameworks.sh\"\n"; | ||
| 367 | + showEnvVarsInLog = 0; | ||
| 368 | + }; | ||
| 369 | +/* End PBXShellScriptBuildPhase section */ | ||
| 370 | + | ||
| 371 | +/* Begin PBXSourcesBuildPhase section */ | ||
| 372 | + 6003F586195388D20070C39A /* Sources */ = { | ||
| 373 | + isa = PBXSourcesBuildPhase; | ||
| 374 | + buildActionMask = 2147483647; | ||
| 375 | + files = ( | ||
| 376 | + 6003F59E195388D20070C39A /* CNLIVEAppDelegate.m in Sources */, | ||
| 377 | + 6003F5A7195388D20070C39A /* CNLIVEViewController.m in Sources */, | ||
| 378 | + 6003F59A195388D20070C39A /* main.m in Sources */, | ||
| 379 | + ); | ||
| 380 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 381 | + }; | ||
| 382 | + 6003F5AA195388D20070C39A /* Sources */ = { | ||
| 383 | + isa = PBXSourcesBuildPhase; | ||
| 384 | + buildActionMask = 2147483647; | ||
| 385 | + files = ( | ||
| 386 | + 6003F5BC195388D20070C39A /* Tests.m in Sources */, | ||
| 387 | + ); | ||
| 388 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 389 | + }; | ||
| 390 | +/* End PBXSourcesBuildPhase section */ | ||
| 391 | + | ||
| 392 | +/* Begin PBXTargetDependency section */ | ||
| 393 | + 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { | ||
| 394 | + isa = PBXTargetDependency; | ||
| 395 | + target = 6003F589195388D20070C39A /* CNLiveDigitalRMBHomeDeom_Example */; | ||
| 396 | + targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; | ||
| 397 | + }; | ||
| 398 | +/* End PBXTargetDependency section */ | ||
| 399 | + | ||
| 400 | +/* Begin PBXVariantGroup section */ | ||
| 401 | + 6003F596195388D20070C39A /* InfoPlist.strings */ = { | ||
| 402 | + isa = PBXVariantGroup; | ||
| 403 | + children = ( | ||
| 404 | + 6003F597195388D20070C39A /* en */, | ||
| 405 | + ); | ||
| 406 | + name = InfoPlist.strings; | ||
| 407 | + sourceTree = "<group>"; | ||
| 408 | + }; | ||
| 409 | + 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { | ||
| 410 | + isa = PBXVariantGroup; | ||
| 411 | + children = ( | ||
| 412 | + 6003F5B9195388D20070C39A /* en */, | ||
| 413 | + ); | ||
| 414 | + name = InfoPlist.strings; | ||
| 415 | + sourceTree = "<group>"; | ||
| 416 | + }; | ||
| 417 | + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */ = { | ||
| 418 | + isa = PBXVariantGroup; | ||
| 419 | + children = ( | ||
| 420 | + 71719F9E1E33DC2100824A3D /* Base */, | ||
| 421 | + ); | ||
| 422 | + name = LaunchScreen.storyboard; | ||
| 423 | + sourceTree = "<group>"; | ||
| 424 | + }; | ||
| 425 | +/* End PBXVariantGroup section */ | ||
| 426 | + | ||
| 427 | +/* Begin XCBuildConfiguration section */ | ||
| 428 | + 6003F5BD195388D20070C39A /* Debug */ = { | ||
| 429 | + isa = XCBuildConfiguration; | ||
| 430 | + buildSettings = { | ||
| 431 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 432 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | ||
| 433 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
| 434 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 435 | + CLANG_ENABLE_MODULES = YES; | ||
| 436 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 437 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 438 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 439 | + CLANG_WARN_COMMA = YES; | ||
| 440 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 441 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 442 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 443 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 444 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 445 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 446 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 447 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 448 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 449 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 450 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 451 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 452 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 453 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 454 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 455 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 456 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 457 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
| 458 | + COPY_PHASE_STRIP = NO; | ||
| 459 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 460 | + ENABLE_TESTABILITY = YES; | ||
| 461 | + GCC_C_LANGUAGE_STANDARD = gnu99; | ||
| 462 | + GCC_DYNAMIC_NO_PIC = NO; | ||
| 463 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 464 | + GCC_OPTIMIZATION_LEVEL = 0; | ||
| 465 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 466 | + "DEBUG=1", | ||
| 467 | + "$(inherited)", | ||
| 468 | + ); | ||
| 469 | + GCC_SYMBOLS_PRIVATE_EXTERN = NO; | ||
| 470 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 471 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 472 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 473 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 474 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 475 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 476 | + IPHONEOS_DEPLOYMENT_TARGET = 12.0; | ||
| 477 | + ONLY_ACTIVE_ARCH = YES; | ||
| 478 | + SDKROOT = iphoneos; | ||
| 479 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 480 | + }; | ||
| 481 | + name = Debug; | ||
| 482 | + }; | ||
| 483 | + 6003F5BE195388D20070C39A /* Release */ = { | ||
| 484 | + isa = XCBuildConfiguration; | ||
| 485 | + buildSettings = { | ||
| 486 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 487 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | ||
| 488 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
| 489 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 490 | + CLANG_ENABLE_MODULES = YES; | ||
| 491 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 492 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 493 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 494 | + CLANG_WARN_COMMA = YES; | ||
| 495 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 496 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 497 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 498 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 499 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 500 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 501 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 502 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 503 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 504 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 505 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 506 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 507 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 508 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 509 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 510 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 511 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 512 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
| 513 | + COPY_PHASE_STRIP = YES; | ||
| 514 | + ENABLE_NS_ASSERTIONS = NO; | ||
| 515 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 516 | + GCC_C_LANGUAGE_STANDARD = gnu99; | ||
| 517 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 518 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 519 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 520 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 521 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 522 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 523 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 524 | + IPHONEOS_DEPLOYMENT_TARGET = 12.0; | ||
| 525 | + SDKROOT = iphoneos; | ||
| 526 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 527 | + VALIDATE_PRODUCT = YES; | ||
| 528 | + }; | ||
| 529 | + name = Release; | ||
| 530 | + }; | ||
| 531 | + 6003F5C0195388D20070C39A /* Debug */ = { | ||
| 532 | + isa = XCBuildConfiguration; | ||
| 533 | + baseConfigurationReference = 5E6E3E09C7DC0CAAF4C6B1B0 /* Pods-CNLiveDigitalRMBHomeDeom_Example.debug.xcconfig */; | ||
| 534 | + buildSettings = { | ||
| 535 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 536 | + DEVELOPMENT_TEAM = 94X49GG3ZW; | ||
| 537 | + GCC_PRECOMPILE_PREFIX_HEADER = YES; | ||
| 538 | + GCC_PREFIX_HEADER = "CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Prefix.pch"; | ||
| 539 | + INFOPLIST_FILE = "CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Info.plist"; | ||
| 540 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | ||
| 541 | + MODULE_NAME = ExampleApp; | ||
| 542 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 543 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 544 | + SWIFT_VERSION = 4.0; | ||
| 545 | + WRAPPER_EXTENSION = app; | ||
| 546 | + }; | ||
| 547 | + name = Debug; | ||
| 548 | + }; | ||
| 549 | + 6003F5C1195388D20070C39A /* Release */ = { | ||
| 550 | + isa = XCBuildConfiguration; | ||
| 551 | + baseConfigurationReference = F99383892248203A26F9A2CF /* Pods-CNLiveDigitalRMBHomeDeom_Example.release.xcconfig */; | ||
| 552 | + buildSettings = { | ||
| 553 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 554 | + DEVELOPMENT_TEAM = 94X49GG3ZW; | ||
| 555 | + GCC_PRECOMPILE_PREFIX_HEADER = YES; | ||
| 556 | + GCC_PREFIX_HEADER = "CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Prefix.pch"; | ||
| 557 | + INFOPLIST_FILE = "CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Info.plist"; | ||
| 558 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | ||
| 559 | + MODULE_NAME = ExampleApp; | ||
| 560 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 561 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 562 | + SWIFT_VERSION = 4.0; | ||
| 563 | + WRAPPER_EXTENSION = app; | ||
| 564 | + }; | ||
| 565 | + name = Release; | ||
| 566 | + }; | ||
| 567 | + 6003F5C3195388D20070C39A /* Debug */ = { | ||
| 568 | + isa = XCBuildConfiguration; | ||
| 569 | + baseConfigurationReference = 52F196DE2B3FB64955E7215B /* Pods-CNLiveDigitalRMBHomeDeom_Tests.debug.xcconfig */; | ||
| 570 | + buildSettings = { | ||
| 571 | + BUNDLE_LOADER = "$(TEST_HOST)"; | ||
| 572 | + FRAMEWORK_SEARCH_PATHS = ( | ||
| 573 | + "$(PLATFORM_DIR)/Developer/Library/Frameworks", | ||
| 574 | + "$(inherited)", | ||
| 575 | + "$(DEVELOPER_FRAMEWORKS_DIR)", | ||
| 576 | + ); | ||
| 577 | + GCC_PRECOMPILE_PREFIX_HEADER = YES; | ||
| 578 | + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; | ||
| 579 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 580 | + "DEBUG=1", | ||
| 581 | + "$(inherited)", | ||
| 582 | + ); | ||
| 583 | + INFOPLIST_FILE = "Tests/Tests-Info.plist"; | ||
| 584 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 585 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 586 | + SWIFT_VERSION = 4.0; | ||
| 587 | + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CNLiveDigitalRMBHomeDeom_Example.app/CNLiveDigitalRMBHomeDeom_Example"; | ||
| 588 | + WRAPPER_EXTENSION = xctest; | ||
| 589 | + }; | ||
| 590 | + name = Debug; | ||
| 591 | + }; | ||
| 592 | + 6003F5C4195388D20070C39A /* Release */ = { | ||
| 593 | + isa = XCBuildConfiguration; | ||
| 594 | + baseConfigurationReference = EFC1B7BC2C4290D50063222D /* Pods-CNLiveDigitalRMBHomeDeom_Tests.release.xcconfig */; | ||
| 595 | + buildSettings = { | ||
| 596 | + BUNDLE_LOADER = "$(TEST_HOST)"; | ||
| 597 | + FRAMEWORK_SEARCH_PATHS = ( | ||
| 598 | + "$(PLATFORM_DIR)/Developer/Library/Frameworks", | ||
| 599 | + "$(inherited)", | ||
| 600 | + "$(DEVELOPER_FRAMEWORKS_DIR)", | ||
| 601 | + ); | ||
| 602 | + GCC_PRECOMPILE_PREFIX_HEADER = YES; | ||
| 603 | + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; | ||
| 604 | + INFOPLIST_FILE = "Tests/Tests-Info.plist"; | ||
| 605 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 606 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 607 | + SWIFT_VERSION = 4.0; | ||
| 608 | + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CNLiveDigitalRMBHomeDeom_Example.app/CNLiveDigitalRMBHomeDeom_Example"; | ||
| 609 | + WRAPPER_EXTENSION = xctest; | ||
| 610 | + }; | ||
| 611 | + name = Release; | ||
| 612 | + }; | ||
| 613 | +/* End XCBuildConfiguration section */ | ||
| 614 | + | ||
| 615 | +/* Begin XCConfigurationList section */ | ||
| 616 | + 6003F585195388D10070C39A /* Build configuration list for PBXProject "CNLiveDigitalRMBHomeDeom" */ = { | ||
| 617 | + isa = XCConfigurationList; | ||
| 618 | + buildConfigurations = ( | ||
| 619 | + 6003F5BD195388D20070C39A /* Debug */, | ||
| 620 | + 6003F5BE195388D20070C39A /* Release */, | ||
| 621 | + ); | ||
| 622 | + defaultConfigurationIsVisible = 0; | ||
| 623 | + defaultConfigurationName = Release; | ||
| 624 | + }; | ||
| 625 | + 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveDigitalRMBHomeDeom_Example" */ = { | ||
| 626 | + isa = XCConfigurationList; | ||
| 627 | + buildConfigurations = ( | ||
| 628 | + 6003F5C0195388D20070C39A /* Debug */, | ||
| 629 | + 6003F5C1195388D20070C39A /* Release */, | ||
| 630 | + ); | ||
| 631 | + defaultConfigurationIsVisible = 0; | ||
| 632 | + defaultConfigurationName = Release; | ||
| 633 | + }; | ||
| 634 | + 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveDigitalRMBHomeDeom_Tests" */ = { | ||
| 635 | + isa = XCConfigurationList; | ||
| 636 | + buildConfigurations = ( | ||
| 637 | + 6003F5C3195388D20070C39A /* Debug */, | ||
| 638 | + 6003F5C4195388D20070C39A /* Release */, | ||
| 639 | + ); | ||
| 640 | + defaultConfigurationIsVisible = 0; | ||
| 641 | + defaultConfigurationName = Release; | ||
| 642 | + }; | ||
| 643 | +/* End XCConfigurationList section */ | ||
| 644 | + }; | ||
| 645 | + rootObject = 6003F582195388D10070C39A /* Project object */; | ||
| 646 | +} |
Example/CNLiveDigitalRMBHomeDeom.xcodeproj/xcshareddata/xcschemes/CNLiveDigitalRMBHomeDeom-Example.xcscheme
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom.xcodeproj/xcshareddata/xcschemes/CNLiveDigitalRMBHomeDeom-Example.xcscheme | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<Scheme | ||
| 3 | + LastUpgradeVersion = "1320" | ||
| 4 | + version = "1.3"> | ||
| 5 | + <BuildAction | ||
| 6 | + parallelizeBuildables = "YES" | ||
| 7 | + buildImplicitDependencies = "YES"> | ||
| 8 | + <BuildActionEntries> | ||
| 9 | + <BuildActionEntry | ||
| 10 | + buildForTesting = "YES" | ||
| 11 | + buildForRunning = "YES" | ||
| 12 | + buildForProfiling = "YES" | ||
| 13 | + buildForArchiving = "YES" | ||
| 14 | + buildForAnalyzing = "YES"> | ||
| 15 | + <BuildableReference | ||
| 16 | + BuildableIdentifier = "primary" | ||
| 17 | + BlueprintIdentifier = "6003F589195388D20070C39A" | ||
| 18 | + BuildableName = "CNLiveDigitalRMBHomeDeom_Example.app" | ||
| 19 | + BlueprintName = "CNLiveDigitalRMBHomeDeom_Example" | ||
| 20 | + ReferencedContainer = "container:CNLiveDigitalRMBHomeDeom.xcodeproj"> | ||
| 21 | + </BuildableReference> | ||
| 22 | + </BuildActionEntry> | ||
| 23 | + </BuildActionEntries> | ||
| 24 | + </BuildAction> | ||
| 25 | + <TestAction | ||
| 26 | + buildConfiguration = "Debug" | ||
| 27 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 28 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 29 | + shouldUseLaunchSchemeArgsEnv = "YES"> | ||
| 30 | + <MacroExpansion> | ||
| 31 | + <BuildableReference | ||
| 32 | + BuildableIdentifier = "primary" | ||
| 33 | + BlueprintIdentifier = "6003F589195388D20070C39A" | ||
| 34 | + BuildableName = "CNLiveDigitalRMBHomeDeom_Example.app" | ||
| 35 | + BlueprintName = "CNLiveDigitalRMBHomeDeom_Example" | ||
| 36 | + ReferencedContainer = "container:CNLiveDigitalRMBHomeDeom.xcodeproj"> | ||
| 37 | + </BuildableReference> | ||
| 38 | + </MacroExpansion> | ||
| 39 | + <Testables> | ||
| 40 | + <TestableReference | ||
| 41 | + skipped = "NO"> | ||
| 42 | + <BuildableReference | ||
| 43 | + BuildableIdentifier = "primary" | ||
| 44 | + BlueprintIdentifier = "6003F5AD195388D20070C39A" | ||
| 45 | + BuildableName = "CNLiveDigitalRMBHomeDeom_Tests.xctest" | ||
| 46 | + BlueprintName = "CNLiveDigitalRMBHomeDeom_Tests" | ||
| 47 | + ReferencedContainer = "container:CNLiveDigitalRMBHomeDeom.xcodeproj"> | ||
| 48 | + </BuildableReference> | ||
| 49 | + </TestableReference> | ||
| 50 | + </Testables> | ||
| 51 | + </TestAction> | ||
| 52 | + <LaunchAction | ||
| 53 | + buildConfiguration = "Debug" | ||
| 54 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 55 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 56 | + launchStyle = "0" | ||
| 57 | + useCustomWorkingDirectory = "NO" | ||
| 58 | + ignoresPersistentStateOnLaunch = "NO" | ||
| 59 | + debugDocumentVersioning = "YES" | ||
| 60 | + debugServiceExtension = "internal" | ||
| 61 | + allowLocationSimulation = "YES"> | ||
| 62 | + <BuildableProductRunnable | ||
| 63 | + runnableDebuggingMode = "0"> | ||
| 64 | + <BuildableReference | ||
| 65 | + BuildableIdentifier = "primary" | ||
| 66 | + BlueprintIdentifier = "6003F589195388D20070C39A" | ||
| 67 | + BuildableName = "CNLiveDigitalRMBHomeDeom_Example.app" | ||
| 68 | + BlueprintName = "CNLiveDigitalRMBHomeDeom_Example" | ||
| 69 | + ReferencedContainer = "container:CNLiveDigitalRMBHomeDeom.xcodeproj"> | ||
| 70 | + </BuildableReference> | ||
| 71 | + </BuildableProductRunnable> | ||
| 72 | + </LaunchAction> | ||
| 73 | + <ProfileAction | ||
| 74 | + buildConfiguration = "Release" | ||
| 75 | + shouldUseLaunchSchemeArgsEnv = "YES" | ||
| 76 | + savedToolIdentifier = "" | ||
| 77 | + useCustomWorkingDirectory = "NO" | ||
| 78 | + debugDocumentVersioning = "YES"> | ||
| 79 | + <BuildableProductRunnable | ||
| 80 | + runnableDebuggingMode = "0"> | ||
| 81 | + <BuildableReference | ||
| 82 | + BuildableIdentifier = "primary" | ||
| 83 | + BlueprintIdentifier = "6003F589195388D20070C39A" | ||
| 84 | + BuildableName = "CNLiveDigitalRMBHomeDeom_Example.app" | ||
| 85 | + BlueprintName = "CNLiveDigitalRMBHomeDeom_Example" | ||
| 86 | + ReferencedContainer = "container:CNLiveDigitalRMBHomeDeom.xcodeproj"> | ||
| 87 | + </BuildableReference> | ||
| 88 | + </BuildableProductRunnable> | ||
| 89 | + </ProfileAction> | ||
| 90 | + <AnalyzeAction | ||
| 91 | + buildConfiguration = "Debug"> | ||
| 92 | + </AnalyzeAction> | ||
| 93 | + <ArchiveAction | ||
| 94 | + buildConfiguration = "Release" | ||
| 95 | + revealArchiveInOrganizer = "YES"> | ||
| 96 | + </ArchiveAction> | ||
| 97 | +</Scheme> |
Example/CNLiveDigitalRMBHomeDeom/Base.lproj/LaunchScreen.storyboard
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/Base.lproj/LaunchScreen.storyboard | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | ||
| 3 | + <device id="retina4_7" orientation="portrait"> | ||
| 4 | + <adaptation id="fullscreen"/> | ||
| 5 | + </device> | ||
| 6 | + <dependencies> | ||
| 7 | + <deployment identifier="iOS"/> | ||
| 8 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> | ||
| 9 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
| 10 | + </dependencies> | ||
| 11 | + <scenes> | ||
| 12 | + <!--View Controller--> | ||
| 13 | + <scene sceneID="EHf-IW-A2E"> | ||
| 14 | + <objects> | ||
| 15 | + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | ||
| 16 | + <layoutGuides> | ||
| 17 | + <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/> | ||
| 18 | + <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/> | ||
| 19 | + </layoutGuides> | ||
| 20 | + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||
| 21 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
| 22 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
| 23 | + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||
| 24 | + </view> | ||
| 25 | + </viewController> | ||
| 26 | + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
| 27 | + </objects> | ||
| 28 | + <point key="canvasLocation" x="53" y="375"/> | ||
| 29 | + </scene> | ||
| 30 | + </scenes> | ||
| 31 | +</document> |
Example/CNLiveDigitalRMBHomeDeom/Base.lproj/Main.storyboard
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/Base.lproj/Main.storyboard | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="whP-gf-Uak"> | ||
| 3 | + <device id="retina4_7" orientation="portrait"> | ||
| 4 | + <adaptation id="fullscreen"/> | ||
| 5 | + </device> | ||
| 6 | + <dependencies> | ||
| 7 | + <deployment identifier="iOS"/> | ||
| 8 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> | ||
| 9 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
| 10 | + </dependencies> | ||
| 11 | + <scenes> | ||
| 12 | + <!--View Controller--> | ||
| 13 | + <scene sceneID="wQg-tq-qST"> | ||
| 14 | + <objects> | ||
| 15 | + <viewController id="whP-gf-Uak" customClass="CNLIVEViewController" sceneMemberID="viewController"> | ||
| 16 | + <layoutGuides> | ||
| 17 | + <viewControllerLayoutGuide type="top" id="uEw-UM-LJ8"/> | ||
| 18 | + <viewControllerLayoutGuide type="bottom" id="Mvr-aV-6Um"/> | ||
| 19 | + </layoutGuides> | ||
| 20 | + <view key="view" contentMode="scaleToFill" id="TpU-gO-2f1"> | ||
| 21 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
| 22 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
| 23 | + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||
| 24 | + </view> | ||
| 25 | + </viewController> | ||
| 26 | + <placeholder placeholderIdentifier="IBFirstResponder" id="tc2-Qw-aMS" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
| 27 | + </objects> | ||
| 28 | + <point key="canvasLocation" x="305" y="433"/> | ||
| 29 | + </scene> | ||
| 30 | + </scenes> | ||
| 31 | +</document> |
Example/CNLiveDigitalRMBHomeDeom/CNLIVEAppDelegate.h
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLIVEAppDelegate.h | ||
| 1 | +// | ||
| 2 | +// CNLIVEAppDelegate.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +@import UIKit; | ||
| 10 | + | ||
| 11 | +@interface CNLIVEAppDelegate : UIResponder <UIApplicationDelegate> | ||
| 12 | + | ||
| 13 | +@property (strong, nonatomic) UIWindow *window; | ||
| 14 | + | ||
| 15 | +@end |
Example/CNLiveDigitalRMBHomeDeom/CNLIVEAppDelegate.m
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLIVEAppDelegate.m | ||
| 1 | +// | ||
| 2 | +// CNLIVEAppDelegate.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "CNLIVEAppDelegate.h" | ||
| 10 | +#import "CNLIVEViewController.h" | ||
| 11 | + | ||
| 12 | +@import CNLiveDigitalRMBHomeDeom; | ||
| 13 | +@implementation CNLIVEAppDelegate | ||
| 14 | + | ||
| 15 | +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | ||
| 16 | +{ | ||
| 17 | + // Override point for customization after application launch. | ||
| 18 | + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; | ||
| 19 | +// UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[CNLIVEViewController alloc] init]]; | ||
| 20 | + CNLiveHomePageDigitalRMBViewController *homeVc = [[CNLiveHomePageDigitalRMBViewController alloc] init]; | ||
| 21 | + | ||
| 22 | + self.window.rootViewController = homeVc; | ||
| 23 | + self.window.backgroundColor = [UIColor whiteColor]; | ||
| 24 | + [self.window makeKeyAndVisible]; | ||
| 25 | + return YES; | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +- (void)applicationWillResignActive:(UIApplication *)application | ||
| 29 | +{ | ||
| 30 | + // 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. | ||
| 31 | + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +- (void)applicationDidEnterBackground:(UIApplication *)application | ||
| 35 | +{ | ||
| 36 | + // 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. | ||
| 37 | + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +- (void)applicationWillEnterForeground:(UIApplication *)application | ||
| 41 | +{ | ||
| 42 | + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +- (void)applicationDidBecomeActive:(UIApplication *)application | ||
| 46 | +{ | ||
| 47 | + // 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. | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +- (void)applicationWillTerminate:(UIApplication *)application | ||
| 51 | +{ | ||
| 52 | + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +@end |
Example/CNLiveDigitalRMBHomeDeom/CNLIVEViewController.h
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLIVEViewController.h | ||
| 1 | +// | ||
| 2 | +// CNLIVEViewController.h | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +@import UIKit; | ||
| 10 | + | ||
| 11 | +@interface CNLIVEViewController : UIViewController | ||
| 12 | + | ||
| 13 | +@end |
Example/CNLiveDigitalRMBHomeDeom/CNLIVEViewController.m
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLIVEViewController.m | ||
| 1 | +// | ||
| 2 | +// CNLIVEViewController.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "CNLIVEViewController.h" | ||
| 10 | +@import CNLiveDigitalRMBHomeDeom; | ||
| 11 | +//#import <CNLiveDigitalRMBHomeDeom/CNLiveHomePageDigitalRMBViewController.h> | ||
| 12 | +@interface CNLIVEViewController () | ||
| 13 | + | ||
| 14 | +@end | ||
| 15 | + | ||
| 16 | +@implementation CNLIVEViewController | ||
| 17 | + | ||
| 18 | +- (void)viewDidLoad | ||
| 19 | +{ | ||
| 20 | + [super viewDidLoad]; | ||
| 21 | + // Do any additional setup after loading the view, typically from a nib. | ||
| 22 | + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; | ||
| 23 | + btn.frame = CGRectMake(100, 100, 150, 100); | ||
| 24 | + btn.backgroundColor = [UIColor redColor]; | ||
| 25 | + [btn setTitle:@"首页" forState:UIControlStateNormal]; | ||
| 26 | + [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; | ||
| 27 | + [self.view addSubview:btn]; | ||
| 28 | +} | ||
| 29 | +- (void)btnAction:(UIButton *)sender | ||
| 30 | +{ | ||
| 31 | + CNLiveHomePageDigitalRMBViewController *homeVc = [[CNLiveHomePageDigitalRMBViewController alloc] init]; | ||
| 32 | + [self.navigationController pushViewController:homeVc animated:YES]; | ||
| 33 | +} | ||
| 34 | +- (void)didReceiveMemoryWarning | ||
| 35 | +{ | ||
| 36 | + [super didReceiveMemoryWarning]; | ||
| 37 | + // Dispose of any resources that can be recreated. | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +@end |
Example/CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Info.plist
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Info.plist | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>CFBundleDevelopmentRegion</key> | ||
| 6 | + <string>en</string> | ||
| 7 | + <key>CFBundleDisplayName</key> | ||
| 8 | + <string>${PRODUCT_NAME}</string> | ||
| 9 | + <key>CFBundleExecutable</key> | ||
| 10 | + <string>${EXECUTABLE_NAME}</string> | ||
| 11 | + <key>CFBundleIdentifier</key> | ||
| 12 | + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||
| 13 | + <key>CFBundleInfoDictionaryVersion</key> | ||
| 14 | + <string>6.0</string> | ||
| 15 | + <key>CFBundleName</key> | ||
| 16 | + <string>${PRODUCT_NAME}</string> | ||
| 17 | + <key>CFBundlePackageType</key> | ||
| 18 | + <string>APPL</string> | ||
| 19 | + <key>CFBundleShortVersionString</key> | ||
| 20 | + <string>1.0</string> | ||
| 21 | + <key>CFBundleSignature</key> | ||
| 22 | + <string>????</string> | ||
| 23 | + <key>CFBundleVersion</key> | ||
| 24 | + <string>1.0</string> | ||
| 25 | + <key>LSRequiresIPhoneOS</key> | ||
| 26 | + <true/> | ||
| 27 | + <key>UILaunchStoryboardName</key> | ||
| 28 | + <string>LaunchScreen</string> | ||
| 29 | + <key>UIMainStoryboardFile</key> | ||
| 30 | + <string>Main</string> | ||
| 31 | + <key>UIRequiredDeviceCapabilities</key> | ||
| 32 | + <array> | ||
| 33 | + <string>armv7</string> | ||
| 34 | + </array> | ||
| 35 | + <key>UISupportedInterfaceOrientations</key> | ||
| 36 | + <array> | ||
| 37 | + <string>UIInterfaceOrientationPortrait</string> | ||
| 38 | + <string>UIInterfaceOrientationLandscapeLeft</string> | ||
| 39 | + <string>UIInterfaceOrientationLandscapeRight</string> | ||
| 40 | + </array> | ||
| 41 | + <key>UISupportedInterfaceOrientations~ipad</key> | ||
| 42 | + <array> | ||
| 43 | + <string>UIInterfaceOrientationPortrait</string> | ||
| 44 | + <string>UIInterfaceOrientationPortraitUpsideDown</string> | ||
| 45 | + <string>UIInterfaceOrientationLandscapeLeft</string> | ||
| 46 | + <string>UIInterfaceOrientationLandscapeRight</string> | ||
| 47 | + </array> | ||
| 48 | +</dict> | ||
| 49 | +</plist> |
Example/CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Prefix.pch
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom-Prefix.pch | ||
| 1 | +// | ||
| 2 | +// Prefix header | ||
| 3 | +// | ||
| 4 | +// The contents of this file are implicitly included at the beginning of every source file. | ||
| 5 | +// | ||
| 6 | + | ||
| 7 | +#import <Availability.h> | ||
| 8 | + | ||
| 9 | +#ifndef __IPHONE_5_0 | ||
| 10 | +#warning "This project uses features only available in iOS SDK 5.0 and later." | ||
| 11 | +#endif | ||
| 12 | + | ||
| 13 | +#ifdef __OBJC__ | ||
| 14 | + @import UIKit; | ||
| 15 | + @import Foundation; | ||
| 16 | +#endif |
Example/CNLiveDigitalRMBHomeDeom/Images.xcassets/AppIcon.appiconset/Contents.json
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/Images.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 | +} |
Example/CNLiveDigitalRMBHomeDeom/en.lproj/InfoPlist.strings
0 → 100644
Example/CNLiveDigitalRMBHomeDeom/main.m
0 → 100644
| 1 | +++ a/Example/CNLiveDigitalRMBHomeDeom/main.m | ||
| 1 | +// | ||
| 2 | +// main.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeom | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +@import UIKit; | ||
| 10 | +#import "CNLIVEAppDelegate.h" | ||
| 11 | + | ||
| 12 | +int main(int argc, char * argv[]) | ||
| 13 | +{ | ||
| 14 | + @autoreleasepool { | ||
| 15 | + return UIApplicationMain(argc, argv, nil, NSStringFromClass([CNLIVEAppDelegate class])); | ||
| 16 | + } | ||
| 17 | +} |
Example/Podfile
0 → 100644
| 1 | +++ a/Example/Podfile | ||
| 1 | +use_frameworks! | ||
| 2 | + | ||
| 3 | +source 'http://bj.gitlab.cnlive.com/ios-team/CNLiveRepos.git' | ||
| 4 | +source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' | ||
| 5 | + | ||
| 6 | +platform :ios, '10.0' | ||
| 7 | + | ||
| 8 | +target 'CNLiveDigitalRMBHomeDeom_Example' do | ||
| 9 | + pod 'CNLiveDigitalRMBHomeDeom', :path => '../' | ||
| 10 | + | ||
| 11 | + target 'CNLiveDigitalRMBHomeDeom_Tests' do | ||
| 12 | + inherit! :search_paths | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + end | ||
| 16 | +end |
Example/Tests/Tests-Info.plist
0 → 100644
| 1 | +++ a/Example/Tests/Tests-Info.plist | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>CFBundleDevelopmentRegion</key> | ||
| 6 | + <string>en</string> | ||
| 7 | + <key>CFBundleExecutable</key> | ||
| 8 | + <string>${EXECUTABLE_NAME}</string> | ||
| 9 | + <key>CFBundleIdentifier</key> | ||
| 10 | + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||
| 11 | + <key>CFBundleInfoDictionaryVersion</key> | ||
| 12 | + <string>6.0</string> | ||
| 13 | + <key>CFBundlePackageType</key> | ||
| 14 | + <string>BNDL</string> | ||
| 15 | + <key>CFBundleShortVersionString</key> | ||
| 16 | + <string>1.0</string> | ||
| 17 | + <key>CFBundleSignature</key> | ||
| 18 | + <string>????</string> | ||
| 19 | + <key>CFBundleVersion</key> | ||
| 20 | + <string>1</string> | ||
| 21 | +</dict> | ||
| 22 | +</plist> |
Example/Tests/Tests-Prefix.pch
0 → 100644
Example/Tests/Tests.m
0 → 100644
| 1 | +++ a/Example/Tests/Tests.m | ||
| 1 | +// | ||
| 2 | +// CNLiveDigitalRMBHomeDeomTests.m | ||
| 3 | +// CNLiveDigitalRMBHomeDeomTests | ||
| 4 | +// | ||
| 5 | +// Created by daojian on 04/26/2023. | ||
| 6 | +// Copyright (c) 2023 daojian. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +@import XCTest; | ||
| 10 | + | ||
| 11 | +@interface Tests : XCTestCase | ||
| 12 | + | ||
| 13 | +@end | ||
| 14 | + | ||
| 15 | +@implementation Tests | ||
| 16 | + | ||
| 17 | +- (void)setUp | ||
| 18 | +{ | ||
| 19 | + [super setUp]; | ||
| 20 | + // Put setup code here. This method is called before the invocation of each test method in the class. | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +- (void)tearDown | ||
| 24 | +{ | ||
| 25 | + // Put teardown code here. This method is called after the invocation of each test method in the class. | ||
| 26 | + [super tearDown]; | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +- (void)testExample | ||
| 30 | +{ | ||
| 31 | + XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +@end | ||
| 35 | + |
Example/Tests/en.lproj/InfoPlist.strings
0 → 100644
LICENSE
0 → 100644
| 1 | +++ a/LICENSE | ||
| 1 | +Copyright (c) 2023 daojian <1145717295@qq.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 | ||
| 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. |
README.md
0 → 100644
| 1 | +++ a/README.md | ||
| 1 | +# CNLiveDigitalRMBHomeDeom | ||
| 2 | + | ||
| 3 | +[](https://travis-ci.org/daojian/CNLiveDigitalRMBHomeDeom) | ||
| 4 | +[](https://cocoapods.org/pods/CNLiveDigitalRMBHomeDeom) | ||
| 5 | +[](https://cocoapods.org/pods/CNLiveDigitalRMBHomeDeom) | ||
| 6 | +[](https://cocoapods.org/pods/CNLiveDigitalRMBHomeDeom) | ||
| 7 | + | ||
| 8 | +## Example | ||
| 9 | + | ||
| 10 | +To run the example project, clone the repo, and run `pod install` from the Example directory first. | ||
| 11 | + | ||
| 12 | +## Requirements | ||
| 13 | + | ||
| 14 | +## Installation | ||
| 15 | + | ||
| 16 | +CNLiveDigitalRMBHomeDeom is available through [CocoaPods](https://cocoapods.org). To install | ||
| 17 | +it, simply add the following line to your Podfile: | ||
| 18 | + | ||
| 19 | +```ruby | ||
| 20 | +pod 'CNLiveDigitalRMBHomeDeom' | ||
| 21 | +``` | ||
| 22 | + | ||
| 23 | +## Author | ||
| 24 | + | ||
| 25 | +daojian, 1145717295@qq.com | ||
| 26 | + | ||
| 27 | +## License | ||
| 28 | + | ||
| 29 | +CNLiveDigitalRMBHomeDeom is available under the MIT license. See the LICENSE file for more info. |
_Pods.xcodeproj
0 → 120000