2015-09-10 7 views
11

Utworzono UIImageView i przypisano mu UIImage. Ustawiłem tryb zawartości UIImageView na Aspect Fit. Jak usunąć wypełnienie z górnej i dolnej części obrazu lub jak zmienić rozmiar obiektu UIImageView, aby owinąć obraz? Próbowałem wszystkiego.Jak usunąć odstępy od aspektu UIImageView w Swift

Jeśli zamierzasz powiedzieć, aby uzyskać nowy rozmiar obrazu, nie będzie działać. Uzyskanie rozmiaru obrazu wewnątrz UIImageView daje tylko szerokość i wysokość oryginalnego obrazu.

Proszę nie łączyć innych postów. Już je przeczytałem. Oni nie pracują.

enter image description here

Odpowiedz

3

Można go obliczyć ręcznie na ramie UIImageView w rozmiarach, które pasują do obrazu z obrazu lub użyj AVMakeRectWithAspectRatioInsideRect (metoda z AVFoundation).

+0

Podczas gdy odpowiedź może być bardziej e pracowałem, dało mi kilka wskazówek, aby rozwiązać mój problem, dzięki! –

+0

@thibautnoah to naprawiłeś? Prosimy o pomoc – user1629977

+0

@ user1629977 Myślę, że moja odpowiedź poniżej jest więcej niż wystarczająco –

0

Załóżmy, że masz zestaw UIImageView równej szerokości w stosunku do widoku. Jednym ze sposobów przerysowania obrazu w celu dopasowania byłoby użycie Core Graphics. To, co robisz, to obliczenie współczynnika skali, aby przerysować obraz, aby pasował prawidłowo. Można znaleźć kilka świetnych próbek tutaj:

https://github.com/natecook1000/Image-Resizing/blob/master/Image%20Resizing/ImageResizingMethods.swift

i dobry samouczek z punktów odniesienia, aby zrozumieć, co lepsze:

http://nshipster.com/image-resizing/

przykładowy kod i używane (które jest w zasadzie jednym z Metody github modyfikuj zgodnie z moimi potrzebami):

  let image = UIImage(data: data!) 
      let oldWidth = image!.size.width 
      let scaleFactor = UIWindow().screen.bounds.width/oldWidth 
      let cgImage = image!.CGImage 

      let width = Double(CGImageGetWidth(cgImage)) * Double(scaleFactor) 
      let height = Double(CGImageGetHeight(cgImage)) * Double(scaleFactor) 
      let bitsPerComponent = CGImageGetBitsPerComponent(cgImage) 
      let bytesPerRow = CGImageGetBytesPerRow(cgImage) 
      let colorSpace = CGImageGetColorSpace(cgImage) 
      let bitmapInfo = CGImageGetBitmapInfo(cgImage) 

      let context = CGBitmapContextCreate(nil, Int(width), Int(height), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue) 

      CGContextSetInterpolationQuality(context, .High) 

      CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(width), height: CGFloat(height))), cgImage) 

      let scaledImage = CGBitmapContextCreateImage(context).flatMap { return UIImage(CGImage: $0) } 
      imageView.image = scaledImage