2015-04-26 60 views
0

我可以在一個UIImageView着色一個UIImage使用工作:imageWithRenderingMode不setImageWithUrl(用於tintColor)

imageView = [[UIImageView alloc]initWithImage:[myImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; 
imageView.tintColor = [UIColor redColor]; 

但是,當圖像與AFNetworking的setImageWithUrl初始化:

imageView = [imageView setImageWithUrl:url]; 
imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
imageView.tintColor = [UIColor redColor]; 

這有沒有效果,圖像以原始顏色顯示。

在iOS 7+上測試。

回答

3

您的代碼無效,因爲您正在分配要從遠程URL獲取的圖像,這需要時間並因此發生以後的 - 您的代碼完成後。因此,該行不執行任何操作:

imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

...因爲,在它運行的時候,imageView.image仍然nil

相反,使用帶有完成處理程序的網絡命令,並且不要在完成處理程序之前更改圖像呈現模式。特別是,我會做的是:首先,下載的圖像。現在(在完成處理程序中)派生模板圖像並將其分配給圖像視圖。

編輯

另一個問題,根據您的意見後,就是你似乎不明白的形象圖是什麼。它擁有一個圖像 - 最近分配的圖像。因此,您的代碼現在的行爲與我所期望的完全相同 - 圖像視圖顯示模板圖像,因爲這是您分配給它的最後一幅圖像。

imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate爲原始圖像的不透明部分着色色調,這就是你現在看到的,所以你的代碼正在工作。

+0

謝謝你這是有道理的,但即使有回調,我也無法同時獲得圖像和過濾器。我究竟做錯了什麼 ?我編輯了我的問題。 – kursus

+0

「圖像和過濾器」是什麼意思?我看不到「過濾器」。也許你不明白什麼設置圖像視圖的圖像呢?你知道,它一次不能有兩個圖像。整個「過濾器」的想法似乎是你在自己的頭腦中構建的東西...... :)也許這會有助於,如果你採取了幾個步驟,並解釋了你最後想做的事情 - 在另一個問題。 (當你這樣做的時候,請在這裏留言,因爲我也想幫助那個人。)但是我相信我已經回答了這個問題。 – matt

+0

「過濾器」是淺色。我並不想分配兩個圖像,代碼中有兩個分配只是爲了顯示第一個圖像顯示圖像,但如果使用RenderingMode執行相同的分配,則不顯示圖像,只顯示色調。 – kursus

0

如果有人仍然遇到這個問題,我的建議是使用UIButton而不是UIImageView。爲UIButton導入「UIButton + AFNetworking.h」和setUserInteractionEnabled爲「FALSE」,使其表現得像UIImageView。

這背後的原因是使用系統的UIButton它以同樣的方式起作用可能爲imageWithRenderingMode的「setTintColor」:UIImageRenderingModeAlwaysTemplate

檢查下面的代碼:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeSystem]; // to use tint color property 
[myButton setFrame:CGRectMake(xPos, yPos, btnWidth, btnHeight)]; 
[myButton setTintColor:[UIColor lightGrayColor]]; 
[myButton setImageForState:UIControlStateNormal withURL:imageURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];