Jak przyciąć UIImageView do nowego UIImage w trybie dopasowania kształtu?

Chciałbym utworzyć nowy UIImage, przycinając obraz wewnątrz UIImageView. Na przykład na powyższym zdjęciu chcę nowy UIImage obszaru zaznaczonego na zielono. Znalazłem kod, aby to zrobić, zwykle wygląda to mniej więcej tak (jako kategoria UIImage):

- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}

Ma sens. JEDNAK, mój UIImageView jest w contentMode „dopasowanie kształtu”. Wydaje się, że to komplikuje obliczenia CGRect dla CGImageCreateWithImageInRect i nie byłem w stanie znaleźć właściwego rozwiązania.

Myślę, że muszę zastosować te same transformacje do zielonego prostego, co do obrazu?

TAKŻE: Znalazłem to inne pytanie tutaj (Jak poznać rozmiar obrazu po zastosowaniu dopasowania kształtu dla obrazu w UIImageView), który wydaje się pokazywać brutalny sposób na uzyskanie rozmiaru, ale wciąż nie jestem pewien, jak to wpasowuje się w sytuację kadrowania.

Jakieś pomysły?

EDYTOWAĆ: W moim przypadku dosłownie mam kwadrat pokazany powyżej w widoku nakładki na UIImageView. Tak więc, podczas gdy zdaję sobie sprawę, że przycinam UIImage (wewnątrz UIImageView), muszę jakoś zmienić zielony CGRect tak, że „pasuje” do transformacji wykonanej po zastosowaniu „dopasowania aspektu”. Na przykład, jeśli zostawiam mój UIImageView w trybie „górny lewy”, wtedy wszystko działa dobrze, ponieważ istnieje mapowanie 1: 1 między bazowym UIImage a UIImageView. Problem w trybie „górnym lewym” polega na tym, że cały obraz nie zawsze jest wyświetlany, ponieważ może być większy niż mój UIImageView.

questionAnswers(4)

yourAnswerToTheQuestion