iOS開發技巧(系列四-圖片拉伸)

咱們能夠經過[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"xxx"]];方法設置背景,假設有一張圖片名稱爲cell_background.png,咱們用它做爲cell背景圖片,app

//前面是一張圖片,不信你拖動鼠標看看this

直接使用[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"cell_background"]], 那麼顯示的時候是比較奇怪的樣子,代碼以下,spa

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath3d

{orm

    //...
對象

    //關鍵代碼
圖片

    cell.backgroundColor = [UIColor clearColor];it

    UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];io

    [cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];table

    //....

}

效果以下圖,

圖片由於拉伸,邊緣都模糊了,這不是咱們想要的結果和效果。

咱們使用UIImage對象的方法,來保持邊緣地方不變,而只是拉伸中間的區域,這樣圖片就不會模糊了,修改的代碼以下,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    //..

    cell.backgroundColor = [UIColor clearColor];

    UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];

    //這裏是關鍵代碼

    cellBackImage = [cellBackImage resizableImageWithCapInsets:UIEdgeInsetsMake(15, 320, 14, 0)];//(top,left,bottom,right)

    [cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];

    //...

}

咱們看一下resizableImageWithCapInsets方法以及它的參數UIEdgeInset

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0); // create a resizable version of this image. the interior is tiled when drawn.


UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {

    UIEdgeInsets insets = {top, left, bottom, right};

    return insets;

}

這個就是設置要保留的邊緣,這樣更改代碼之後,咱們的效果圖以下,

這樣就顯得正常了,看起來也舒服多了吧?

PS:最近在看一些完整的開源代碼,例如Code4app上面的「內涵糗事」,其實看了別人的代碼,能夠忽然有種想通了得感受。上面的這個例子就是我本身在開源代碼上面看見的一個細節,把抽象出來與你們共享。

相關文章
相關標籤/搜索