contentMode與clipsToBounds合用實現顯示圖片的內容與實際圖片大小不一樣的特殊情況

來源:互聯網
上載者:User

有這樣的需求, 一個UIimage的大小為768*1024, 被一個UIImageView載入到介面上。

顯然, 這個時候,它的

contentMode;                // default is UIViewContentModeScaleToFill

以及

clipsToBounds;              // When YES, content and subviews are clipped to the bounds of the view. Default is NO.

這個時候, 我們需要這個UIImageView產生一個互動, 如拖動,點擊等。 

但是我們還把這個UIImageView加入到一個滾動背景中。 

因為我們同時需要在這個UIImageView上作一些互動, 而背景又是一個滾動背景, 如果我們所做的互動正好又是一個拖動, 那麼問題就來了。  因為我們的拖動把背景的滾動視圖的互動給截獲了。 如何解決呢?

1, 我們可以定製這個UIImageView為一個UIControl控制項, 然後在傳遞事件時,通過一些判斷條件,把事件繼續向下傳遞。 就可以做到。 但實際過程中, 這個判斷條件很難寫出。

2。我們換用一種較為簡單的方式, 通常我們這個UIImageView的互動部分, 不會是一個768*1024的地區, 而會是一個小部分地區,如左上方的300*400, 在這個基礎上, 我們就有了一種解決辦法。

就是把這個UIimageView的frame設定成300*400, 同時支援拖動事件, 並繼續放置在整個滾動視圖的背景上。 這樣除開這300*400地區的部分, 仍然可以響應使用者在滾動視圖上的拖動。

那麼如何把這個UIImageView的frame設定成300*400, 但顯示的時候仍然顯示這個UIImageView的整個768*1024的內容呢。

用ContentMode以及ClipsToBounds.

上代碼:

    _dragView = [[UIImageView
alloc] initWithFrame:CGRectFromString(@"{{0,0},{300,400}}")];

   
UIImage *image = [UIImage
imageNamed:@"t1.png"];

   
_dragView.image = image;

    [self.view
addSubview:_dragView];

    _dragView.backgroundColor = [UIColor
redColor];

    _dragView.clipsToBounds =
NO;

    _dragView.contentMode =
UIViewContentModeTopLeft;

    NSLog(@"_dragView.frame=%@",
NSStringFromCGRect(_dragView.frame));

    //建立一個平移手勢對象,該對象可以調用handelPan:方法

    UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer
alloc]
initWithTarget:self
action:@selector(handelPan:)];

    panGes.delegate =
self;

    _dragView.userInteractionEnabled =
YES;

    [_dragView
addGestureRecognizer:panGes];


添加完成後, 我們會發現這個輸出的frame即為0, 0, 300, 400. 紅色部分為該UIImageView的frame位置。 只有這部分內容才會被添加拖動手勢。 其它地方的部分不會響應這個拖動手勢。 會被背部的滾動視圖所響應。

註:

1。 上面把contentMode設定成UIViewContentModeTopLeft是為了更好的以左上方為基礎作計算點。

2。 上面的這個clipsToBounds預設為No, 所以設定不設定沒關係的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.