從刷爆 IT 圈的一個事件說起:
新聞:某互聯網公司產品經理提出一個需求--要求APP開發人員做到軟件根據用戶的手機殼改變軟件的主題顏色。
What Fuck!還有這操作,PM,你過來,保證不打屎你。
結果出現了.mov中出現的“親熱”的肢體接觸事件(PS:平安產險的伙食一定很豐盛。額,䅰~)。
笑話看過了,要認真的研讀下這個需求了:根據手機殼顏色來設置應用主題色。
很多“牛(kan)逼(ke)”的技術團隊給出了多個解決方案:
1、
2、
3、.......
那么除了那么多穿戴設備及高端的天文組加入外,我們純APP開發人員怎么實現這個需求?可以考慮換個思路來實現這個需求:通過手機攝像頭拍照或相冊選擇手機殼照片,然后提取照片的主色調或者照片虛化設置背景圖片(如酷我音樂那種)。當然如果PM認為這種方法太笨,想要智能的那種,我建議公司多給PM申請一份保險【捂臉笑】.gif。
假定PM原定想的是獲取手機出廠時顏色(黑,銀,土豪金)。
代碼如下:
#warning 該方法是私有 API,上線會被拒 UIDevice *device = [UIDevice currentDevice]; SEL selector = NSSelectorFromString(@"deviceInfoForKey:"); if (![device respondsToSelector:selector]) { selector = NSSelectorFromString(@"_deviceInfoForKey:"); } if ([device respondsToSelector:selector]) { IMP imp = [device methodForSelector:selector]; NSString *(*func)(id, SEL, NSString *) = (void*)imp; NSString *deviceColor = func(device, selector, @"DeviceColor"); NSString *deviceEnclosureColor = func(device, selector, @"DeviceEnclosureColor"); NSLog(@"deviceColor -- >%@\n deviceEnclosureColor===>%@ ", deviceColor, deviceEnclosureColor); }
可獲得手機外殼顏色。
如果產品指獲取手機購買的外殼顏色,可以使用拍照,獲取圖片的平均顏色值。
找到一個不錯的開源項目:SOZOChromoplast,可直接使用。
使用時:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; _imageView.image = image; _chromoplast = [[SOZOChromoplast alloc] initWithImage:image]; self.view.backgroundColor = _chromoplast.dominantColor; [picker dismissViewControllerAnimated:YES completion:nil]; }
效果如下: