簡體   English   中英

完全縮放圖像而不會丟失其內容

[英]Scaling the image fully without losing its content

我正在迅速處理一個項目,在該項目中,我使用xib文件加載了標題圖像。 到目前為止,在我的圖像視圖中僅部分可見。 我怎么能克服這個問題。

我想要的是 在此處輸入圖片說明

但是我得到的是這個。

在此處輸入圖片說明

一旦我將內容心情設置為適合方面,這就是我想要的。 在此處輸入圖片說明

這是我的故事 在此處輸入圖片說明 在此處輸入圖片說明

正如您所看到的,一直到屏幕右方的“月亮”都沒有出現在圖片中。 我如何正確縮放?

嘗試用下面的行調整圖像大小

[[UIImage imageNamed:@"YOURIMAGE"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]

UIEdgeInsetsMake左上右下必須正確。

您需要使imageView和圖像具有相等的比率,即imageView的大小為26:46(height:width)時,圖像應遵循相同的比率標准,即13:23或52:92。 您需要根據寬度/高度更改UIImageView以匹配圖像的比例。 無法拉伸圖像。

請在預覽應用中查看圖像,將縱橫比設置為imageView。 一旦您在xib中打開與UIImageView的寬度相同的圖像集圖像寬度,則相應地將在預覽編輯器中調整高度。

現在轉到您的xib文件,設置imageview高度與預覽中顯示的高度相同,然后設置imageView縱橫比。

確保對xib中的imageView施加了足夠的約束。

這樣,圖像將根據不同的設備尺寸進行調整。 確保圖像寬度不小於從xib計算得出的最大imageView寬度,由於寬高比屬性,imageview的高度將相應調整。

這里要了解的主要點是,它不適用於使用1張圖像的所有屏幕。

原因:設計師為您提供了58高度和375寬度(iphone 8的寬度)的圖像。

因此,有一個問題如何在iPhone SE和iPhone 8plus上顯示此圖像? 而且您只有1張圖片。 答案是,您無法使它具有1張圖像的完美像素。

解決方案:

  1. 詢問設計師他對所有設備都使用1張圖像的感覺如何。
  2. 要求設計師為您制作3張不同的圖像。
  3. 圖像和文字分開。 索取1張圖片,使其scaleFill內容模式,並自行放置文本標簽。

希望能幫助到你。

您必須使用scaleToFill它將有所幫助

AspectFill縮放內容以完全填充視圖,並保持縱橫比;而ScaleToFill拉伸視圖以填充可用空間,而不保持縱橫比

因此,這可以拉伸您的圖像,但可以使用

如果您只想適合給定的圖像而不保持寬高比,則只需使用

imageView.contentMode = .scaleToFill

但是如果要保持寬高比,則需要調整圖像大小以適合imageView。 您可以使用下面的函數並傳遞imageView大小並應用返回的圖像。 在這里了解更多

extension UIImageView {

  func imageScaledToFit(_ size: CGSize) -> UIImage {
    let imageAspectRatio = self.size.width / self.size.height
    let canvasAspectRatio = size.width / size.height
    var resizeFactor: CGFloat

    if imageAspectRatio > canvasAspectRatio {        
       resizeFactor = size.width / self.size.width
    } else {
       resizeFactor = size.height / self.size.height
    }

    let scaledSize = CGSize(width: self.size.width * resizeFactor, height: self.size.height * resizeFactor)
    let origin = CGPoint(x: (size.width - scaledSize.width) / 2.0, y: (size.height - scaledSize.height) / 2.0)

    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    draw(in: CGRect(origin: origin, size: scaledSize))

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    return scaledImage 
  }
}

現在您可以像

imageView.contentMode = .scaleAspectFit
imageView.image = image.imageScaledToFit(imageView.bounds.size) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM