Commit 4bf957e8435795fb52d1f2f22bc6dff6c8610272

Authored by niudaojian
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
  1 +++ a/CNLiveDigitalRMBHomeDeom/Assets/CNLiveDigitalRMB.xcassets/Contents.json
  1 +{
  2 + "info" : {
  3 + "author" : "xcode",
  4 + "version" : 1
  5 + }
  6 +}
... ...
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
  1 +++ a/Example/CNLiveDigitalRMBHomeDeom/en.lproj/InfoPlist.strings
  1 +/* Localized versions of Info.plist keys */
  2 +
... ...
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
  1 +++ a/Example/Tests/Tests-Prefix.pch
  1 +// The contents of this file are implicitly included at the beginning of every test case source file.
  2 +
  3 +#ifdef __OBJC__
  4 +
  5 +
  6 +
  7 +#endif
... ...
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
  1 +++ a/Example/Tests/en.lproj/InfoPlist.strings
  1 +/* Localized versions of Info.plist keys */
  2 +
... ...
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 +[![CI Status](https://img.shields.io/travis/daojian/CNLiveDigitalRMBHomeDeom.svg?style=flat)](https://travis-ci.org/daojian/CNLiveDigitalRMBHomeDeom)
  4 +[![Version](https://img.shields.io/cocoapods/v/CNLiveDigitalRMBHomeDeom.svg?style=flat)](https://cocoapods.org/pods/CNLiveDigitalRMBHomeDeom)
  5 +[![License](https://img.shields.io/cocoapods/l/CNLiveDigitalRMBHomeDeom.svg?style=flat)](https://cocoapods.org/pods/CNLiveDigitalRMBHomeDeom)
  6 +[![Platform](https://img.shields.io/cocoapods/p/CNLiveDigitalRMBHomeDeom.svg?style=flat)](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
  1 +++ a/_Pods.xcodeproj
  1 +Example/Pods/Pods.xcodeproj
0 2 \ No newline at end of file
... ...