Commit 3afdb34e03532f819f60e911c56caf04d6992405
1 parent
2ba6fc2a
启动图,后台控制颜色
Showing
7 changed files
with
132 additions
and
7 deletions
CNLiveScioLive/AppDelegate.m
| @@ -15,6 +15,9 @@ | @@ -15,6 +15,9 @@ | ||
| 15 | #endif | 15 | #endif |
| 16 | 16 | ||
| 17 | @interface AppDelegate ()<XGPushDelegate> | 17 | @interface AppDelegate ()<XGPushDelegate> |
| 18 | +{ | ||
| 19 | + UIImageView *imageView; | ||
| 20 | +} | ||
| 18 | @property (nonatomic, assign) BOOL isPush; //区分普通启动还是推送 | 21 | @property (nonatomic, assign) BOOL isPush; //区分普通启动还是推送 |
| 19 | @property (nonatomic, copy) NSString *type; //区分首页还是直播 还是id | 22 | @property (nonatomic, copy) NSString *type; //区分首页还是直播 还是id |
| 20 | @property (nonatomic, assign) BOOL language; //区分消息是中英文语言 | 23 | @property (nonatomic, assign) BOOL language; //区分消息是中英文语言 |
| @@ -22,7 +25,6 @@ | @@ -22,7 +25,6 @@ | ||
| 22 | @end | 25 | @end |
| 23 | 26 | ||
| 24 | @implementation AppDelegate | 27 | @implementation AppDelegate |
| 25 | - | ||
| 26 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { | 28 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
| 27 | // Override point for customization after application launch. | 29 | // Override point for customization after application launch. |
| 28 | [self restoreStatusBarOrientation]; | 30 | [self restoreStatusBarOrientation]; |
| @@ -56,7 +58,21 @@ | @@ -56,7 +58,21 @@ | ||
| 56 | [self checkAppUpdate]; | 58 | [self checkAppUpdate]; |
| 57 | 59 | ||
| 58 | [self initializeSDKConfiguration]; | 60 | [self initializeSDKConfiguration]; |
| 59 | - | 61 | + [self requestLanchImage]; |
| 62 | + NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"lanchImage"]; | ||
| 63 | + if (data.length>0) { | ||
| 64 | + UIViewController *VC = [[UIViewController alloc] init]; | ||
| 65 | + imageView= [[UIImageView alloc ] initWithFrame :[ UIScreen mainScreen ]. bounds ]; | ||
| 66 | + [imageView setImage:[UIImage imageWithData:data]]; | ||
| 67 | + [VC.view addSubview:imageView]; | ||
| 68 | + self.window.rootViewController = VC; | ||
| 69 | + [self performSelector:@selector(removeImage) withObject:nil afterDelay:3]; | ||
| 70 | + [self.window makeKeyAndVisible]; | ||
| 71 | + } | ||
| 72 | + return YES; | ||
| 73 | +} | ||
| 74 | +-(void)addRootViewController | ||
| 75 | +{ | ||
| 60 | if(IS_CHINESE){ | 76 | if(IS_CHINESE){ |
| 61 | CNHomeRightViewController *rightVC = [[CNHomeRightViewController alloc]init]; | 77 | CNHomeRightViewController *rightVC = [[CNHomeRightViewController alloc]init]; |
| 62 | CNLiveTabBarController *liveTab = [[CNLiveTabBarController alloc] init]; | 78 | CNLiveTabBarController *liveTab = [[CNLiveTabBarController alloc] init]; |
| @@ -77,8 +93,48 @@ | @@ -77,8 +93,48 @@ | ||
| 77 | self.window.rootViewController = liveTab; | 93 | self.window.rootViewController = liveTab; |
| 78 | } | 94 | } |
| 79 | [self.window makeKeyAndVisible]; | 95 | [self.window makeKeyAndVisible]; |
| 80 | - | ||
| 81 | - return YES; | 96 | +} |
| 97 | +#pragma mark - 请求启动页 | ||
| 98 | +-(void)requestLanchImage | ||
| 99 | +{ | ||
| 100 | + NSString *urlStr = @"http://app.phonemovie.cnlive.com/gxb/openBanner"; | ||
| 101 | + NSDictionary *parameters = @{@"params":@"{\"plat\":\"i\",\"version\":\"5.0\",\"appid\":\"gxb\",\"pageUUID\":\"852cde69-ecd8-11e6-b52e-c7d8a7a18cc4\",\"pageType\":\"channelList\"}"}; | ||
| 102 | + [XWHTTPTool GET:urlStr params:parameters success:^(id json) { | ||
| 103 | + NSDictionary *dic = [NSDictionary dictionaryWithDictionary:json]; | ||
| 104 | + NSURL *url = [NSURL URLWithString:dic[@"data"][@"image"]]; | ||
| 105 | + if ([dic[@"data"][@"grayMode"] isEqualToString:@"true"]) { | ||
| 106 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:ISGRAYMODE]; | ||
| 107 | + }else{ | ||
| 108 | + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:ISGRAYMODE]; | ||
| 109 | + } | ||
| 110 | + NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"lanchImage"]; | ||
| 111 | + if (data.length<=0) { | ||
| 112 | + [self addRootViewController]; | ||
| 113 | + } | ||
| 114 | + NSURLSessionConfiguration *configuration = [ NSURLSessionConfiguration defaultSessionConfiguration ]; | ||
| 115 | + AFURLSessionManager *manager = [[ AFURLSessionManager alloc ] initWithSessionConfiguration :configuration]; | ||
| 116 | + NSURLRequest *request = [ NSURLRequest requestWithURL :url]; | ||
| 117 | + NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest :request progress : nil destination :^ NSURL *( NSURL *targetPath, NSURLResponse *response) { | ||
| 118 | + | ||
| 119 | + NSURL *documentsDirectoryURL = [[ NSFileManager defaultManager ] URLForDirectory : NSDocumentDirectory inDomain : NSUserDomainMask appropriateForURL : nil create : NO error : nil ]; | ||
| 120 | + return [documentsDirectoryURL URLByAppendingPathComponent :[response suggestedFilename ]]; | ||
| 121 | + } completionHandler :^( NSURLResponse *response, NSURL *filePath, NSError *error) { | ||
| 122 | + NSLog ( @"File downloaded to: %@" , filePath); | ||
| 123 | + | ||
| 124 | + NSData * image = [NSData dataWithContentsOfURL :filePath]; | ||
| 125 | + [[ NSUserDefaults standardUserDefaults ] setObject :image forKey : @"lanchImage"]; | ||
| 126 | + | ||
| 127 | + }]; | ||
| 128 | + [downloadTask resume ]; | ||
| 129 | + | ||
| 130 | + } failure:^(NSError *error) { | ||
| 131 | + [self requestLanchImage]; | ||
| 132 | + }]; | ||
| 133 | +} | ||
| 134 | +-(void)removeImage{ | ||
| 135 | + [imageView removeFromSuperview]; | ||
| 136 | + imageView = nil; | ||
| 137 | + [self addRootViewController]; | ||
| 82 | } | 138 | } |
| 83 | //语言 | 139 | //语言 |
| 84 | #pragma mark - 语言 | 140 | #pragma mark - 语言 |
CNLiveScioLive/Pages/Header/SystemMacro.h
| @@ -98,6 +98,7 @@ NO) | @@ -98,6 +98,7 @@ NO) | ||
| 98 | #define LoginSuccessful @"LoginSuccessful" | 98 | #define LoginSuccessful @"LoginSuccessful" |
| 99 | #define ExitSuccessful @"ExitSuccessful" | 99 | #define ExitSuccessful @"ExitSuccessful" |
| 100 | #define GetCodeSuccessful @"GetCodeSuccessful" | 100 | #define GetCodeSuccessful @"GetCodeSuccessful" |
| 101 | +#define ISGRAYMODE @"isGrayMode" | ||
| 101 | 102 | ||
| 102 | //图片 | 103 | //图片 |
| 103 | #define Image(image) [UIImage imageNamed:image] | 104 | #define Image(image) [UIImage imageNamed:image] |
CNLiveScioLive/Pages/Home/CNHomeViewController.m
| @@ -93,6 +93,10 @@ | @@ -93,6 +93,10 @@ | ||
| 93 | } | 93 | } |
| 94 | if(controllers.count > 0){ | 94 | if(controllers.count > 0){ |
| 95 | self.segmentControl.titles = titles; | 95 | self.segmentControl.titles = titles; |
| 96 | + if (ininav[@"textColor"]) { | ||
| 97 | + self.segmentControl.titleSelectColor = [UIColor colorWithHexString:ininav[@"textColor"]]; | ||
| 98 | + [self.segmentControl setBottomViewColor:[UIColor colorWithHexString:ininav[@"textColor"]]]; | ||
| 99 | + } | ||
| 96 | self.segmentControl.viewControllers = controllers; | 100 | self.segmentControl.viewControllers = controllers; |
| 97 | } | 101 | } |
| 98 | NSDictionary *dic = @{@"titles":titles}; | 102 | NSDictionary *dic = @{@"titles":titles}; |
CNLiveScioLive/Pages/Tools/ImageGray/UIColor+CNGray.h
CNLiveScioLive/Pages/Tools/ImageGray/UIColor+CNGray.m
| @@ -20,7 +20,65 @@ | @@ -20,7 +20,65 @@ | ||
| 20 | }); | 20 | }); |
| 21 | } | 21 | } |
| 22 | + (UIColor *)cn_colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)a{ | 22 | + (UIColor *)cn_colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)a{ |
| 23 | - CGFloat gray = red*0.299 + green*0.587 + blue*0.114; | ||
| 24 | - return [self cn_colorWithRed:gray green:gray blue:gray alpha:a]; | 23 | + BOOL isGray = [[NSUserDefaults standardUserDefaults] boolForKey:ISGRAYMODE]; |
| 24 | + if (isGray) { | ||
| 25 | + CGFloat gray = red*0.299 + green*0.587 + blue*0.114; | ||
| 26 | + return [self cn_colorWithRed:gray green:gray blue:gray alpha:a]; | ||
| 27 | + } | ||
| 28 | + return [self cn_colorWithRed:red green:green blue:blue alpha:a]; | ||
| 25 | } | 29 | } |
| 30 | + | ||
| 31 | +static inline NSUInteger hexStrToInt(NSString *str) { | ||
| 32 | + uint32_t result = 0; | ||
| 33 | + sscanf([str UTF8String], "%X", &result); | ||
| 34 | + return result; | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +static BOOL hexStrToRGBA(NSString *str, | ||
| 38 | + CGFloat *r, CGFloat *g, CGFloat *b, CGFloat *a) { | ||
| 39 | + | ||
| 40 | + | ||
| 41 | + str = ({ // Trim blank characters (space and newline) in head and tail. | ||
| 42 | + NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; | ||
| 43 | + [[str stringByTrimmingCharactersInSet:set] uppercaseString]; | ||
| 44 | + | ||
| 45 | + }); | ||
| 46 | + | ||
| 47 | + if ([str hasPrefix:@"#"]) { | ||
| 48 | + str = [str substringFromIndex:1]; | ||
| 49 | + } else if ([str hasPrefix:@"0X"]) { | ||
| 50 | + str = [str substringFromIndex:2]; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + NSUInteger length = [str length]; | ||
| 54 | + // RGB RGBA RRGGBB RRGGBBAA | ||
| 55 | + if (length != 3 && length != 4 && length != 6 && length != 8) { | ||
| 56 | + return NO; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + //RGB,RGBA,RRGGBB,RRGGBBAA | ||
| 60 | + if (length < 5) { | ||
| 61 | + *r = hexStrToInt([str substringWithRange:NSMakeRange(0, 1)]) / 255.0f; | ||
| 62 | + *g = hexStrToInt([str substringWithRange:NSMakeRange(1, 1)]) / 255.0f; | ||
| 63 | + *b = hexStrToInt([str substringWithRange:NSMakeRange(2, 1)]) / 255.0f; | ||
| 64 | + if (length == 4) *a = hexStrToInt([str substringWithRange:NSMakeRange(3, 1)]) / 255.0f; | ||
| 65 | + else *a = 1; | ||
| 66 | + } else { | ||
| 67 | + *r = hexStrToInt([str substringWithRange:NSMakeRange(0, 2)]) / 255.0f; | ||
| 68 | + *g = hexStrToInt([str substringWithRange:NSMakeRange(2, 2)]) / 255.0f; | ||
| 69 | + *b = hexStrToInt([str substringWithRange:NSMakeRange(4, 2)]) / 255.0f; | ||
| 70 | + if (length == 8) *a = hexStrToInt([str substringWithRange:NSMakeRange(6, 2)]) / 255.0f; | ||
| 71 | + else *a = 1; | ||
| 72 | + } | ||
| 73 | + return YES; | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | ++ (instancetype)colorWithHexString:(NSString *)hexStr { | ||
| 77 | + CGFloat r, g, b, a; | ||
| 78 | + if (hexStrToRGBA(hexStr, &r, &g, &b, &a)) { | ||
| 79 | + return [UIColor colorWithRed:r green:g blue:b alpha:a]; | ||
| 80 | + } | ||
| 81 | + return nil; | ||
| 82 | +} | ||
| 83 | + | ||
| 26 | @end | 84 | @end |
CNLiveScioLive/Pages/Tools/ImageGray/UIImageView+CNGrayImage.m
| @@ -24,7 +24,10 @@ | @@ -24,7 +24,10 @@ | ||
| 24 | - (void)xmtSwizzledSetImage:(UIImage *)image { | 24 | - (void)xmtSwizzledSetImage:(UIImage *)image { |
| 25 | 25 | ||
| 26 | /// 图片使用灰白处理 | 26 | /// 图片使用灰白处理 |
| 27 | + BOOL gray = [[NSUserDefaults standardUserDefaults] boolForKey:ISGRAYMODE]; | ||
| 28 | + if (gray) { | ||
| 27 | image = [UIImage grayImage:image]; | 29 | image = [UIImage grayImage:image]; |
| 30 | + } | ||
| 28 | [self xmtSwizzledSetImage:image]; | 31 | [self xmtSwizzledSetImage:image]; |
| 29 | } | 32 | } |
| 30 | @end | 33 | @end |
CNLiveScioLive/Pages/Tools/ImageGray/WKWebView+CNGray.m
| @@ -20,6 +20,8 @@ | @@ -20,6 +20,8 @@ | ||
| 20 | }); | 20 | }); |
| 21 | } | 21 | } |
| 22 | - (instancetype)cn_initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration { | 22 | - (instancetype)cn_initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration { |
| 23 | + BOOL gray = [[NSUserDefaults standardUserDefaults] boolForKey:ISGRAYMODE]; | ||
| 24 | + if (gray) { | ||
| 23 | // js脚本 | 25 | // js脚本 |
| 24 | NSString *jScript = @"var filter = '-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%) filter:grayscale(100%);';document.getElementsByTagName('html')[0].style.filter = 'grayscale(100%)';meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);"; | 26 | NSString *jScript = @"var filter = '-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%) filter:grayscale(100%);';document.getElementsByTagName('html')[0].style.filter = 'grayscale(100%)';meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);"; |
| 25 | // 注入 | 27 | // 注入 |
| @@ -31,6 +33,7 @@ | @@ -31,6 +33,7 @@ | ||
| 31 | WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; | 33 | WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; |
| 32 | wkWebConfig.userContentController = wkUController; | 34 | wkWebConfig.userContentController = wkUController; |
| 33 | configuration = wkWebConfig; | 35 | configuration = wkWebConfig; |
| 36 | + } | ||
| 34 | WKWebView *webView = [self cn_initWithFrame:frame configuration:configuration]; | 37 | WKWebView *webView = [self cn_initWithFrame:frame configuration:configuration]; |
| 35 | return webView; | 38 | return webView; |
| 36 | } | 39 | } |