看標題還不知道要做什麼,那麼就直接來寫程式!
其實一張圖多顏色 (One Image Multi Color),就是想要只提供一張圖片,就能呈現多樣顏色,這有什麼好處?就不用設計師出許多不同顏色的圖囉!
原本給的圖是土色,圖案上還有些許木頭紋路,我們來嘗試改變它的Tint Color~
初始化ImageView,設定Image的UIImageRenderingMode為UIImageRenderingModeAlwaysTemplate。
/** Theme: One Image Multi Color IDE: Xcode 12 Language: Objective C Date: 109/10/15 Author: HappyMan Blog: https://cg2010studio.com/ */ - (void)testImage { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"happy day"]]; imageView.tintColor = [UIColor blackColor]; [self.view addSubview:imageView]; imageView.center = CGPointMake(200, 100); UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"happy day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; imageView2.tintColor = [UIColor blackColor]; [self.view addSubview:imageView2]; imageView2.center = CGPointMake(200, 300); UIImageView *imageView3 = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"happy day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; imageView3.tintColor = [UIColor greenColor]; [self.view addSubview:imageView3]; imageView3.center = CGPointMake(200, 500); }
呈現在螢幕上如是~看起來紋路不見了呢!
201124更新
若只想在UIImage上做處理,可以使用⋯⋯
/** Theme: One Image Multi Color IDE: Xcode 12 Language: Objective C Date: 109/11/24 Author: HappyMan Blog: https://cg2010studio.com/ */ - (void)testImage2 { // Create a graphics image context UIGraphicsBeginImageContext(newSize); image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIColor *color = [UIColor redColor]; [color setFill]; // Tell the old image to draw in this new context, with the desired // new size [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; // Get the new image from the context UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); // End the context UIGraphicsEndImageContext(); }
原圖
上色圖
參考:單一色系圖片,直接用程式改變圖片的顏色 imageWithRenderingMode、How can I change image tintColor in iOS and WatchKit。
隨意留個言吧:)~