1. 在畫面上加入顯示狐狸圖片的UIButton
UIButton *imageButton = [[UIButton alloc] initWithFrame:CGRectMake(60, 80, 200, 200)];
[imageButton setImage:[UIImage imageNamed:@"fox.png"] forState:UIControlStateNormal];
[self.view addSubview:imageButton];
2. 在圖片上加上同樣200*200的半透明View,方便我們等會分析圖片的縮放。
UIView *whiteView = [[UIView alloc] initWithFrame:CGRectMake(60, 80, 200, 200)];
whiteView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.3];
[self.view addSubview:whiteView];
執行App:
如圖所示,當利用setImage:forState:設定圖片時,預設的contentMode為UIViewContentModeScaleToFill,所以令人心疼地,可愛的小狐狸變形了。
讓我們將contentMode設為UIViewContentModeScaleAspectFit,救救小狐狸,讓牠維持比例縮放吧。
imageButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
執行App:
如圖所示,圖片乖乖地待在我們限定的200*200範圍內維持比例縮放,不敢越雷池一步。(可從半透明的View辨別200*200所在範圍)
能不能貪心地希望小狐狸更清楚點,給小狐狸特寫呢?當然可以,只要將contentMode設為UIViewContentModeScaleAspectFill,即可讓小狐狸維持比例縮放,但又能勇敢地部分超出範圍,實現完全佔滿200*200範圍的目標。
imageButton.imageView.contentMode = UIViewContentModeScaleAspectFill;
執行App:
imageButton的imageView.clipsToBounds預設為YES,所以超出的部分看不到。相反的,如果是UIImageView物件,其clipsToBounds預設為NO,所以當contentMode設為UIViewContentModeScaleAspectFill時,我們將完整看到超出的部分。
sometimes when we touch
除了clipsToBounds的差異外,UIButton和UIImageView最大的差別在於它可以觸碰,它是有感情,觸碰會有感應的,不像冰冷冷的UIImageView。如下圖所示,當sometimes when we touch發生時,仿彿有氣氛的夜晚來臨,圖片明顯變暗讓我們明確感覺正在觸碰中。
但在iOS 5時,當我們調整了UIButton的imageView.contentMode後,觸碰時卻會產生不正常的現象。如下圖所示,觸碰時圖片又回復為原來的UIViewContentModeScaleToFill。因此,在iOS 5時,為了解決這個問題,有個折衷的做法,那就是將UIButton的adjustsImageWhenHighlighted設為NO,如此雖然Touch時不會變暗,但至少圖片不會變形。
圖片尺寸問題
特別感謝:
查爾斯的blog視說新語:
http://whereyou.pixnet.net/blog
查爾斯的FB視說新語:
https://www.facebook.com/EyeNews
沒有留言:
張貼留言