2012-01-28 6 views
35

W jaki sposób ekran przesuwania i skalowania określa wymiary jego skrytki?Ustaw wymiary dla skórki UIImagePickerController "przenieś i skaluj"

Zasadniczo chciałbym ustawić stałą szerokość i wysokość dla "CropRect" i pozwolić użytkownikowi przesuwać i skalować jego obraz, aby dopasować się do tego pola zgodnie z potrzebami.

Czy ktoś wie, jak to zrobić? (Lub jeśli jest to możliwe nawet z UIImagePickerController)

Dzięki!

+0

Czy ktoś może mieć to samo rozwiązanie dla szybkiej? –

Odpowiedz

33

Niemożliwe z UIImagePickerController. Zalecam rozwiązanie, które należy wyłączyć w przypadku selektora obrazu i obsłużyć go samemu. Na przykład umieściłem obraz w przewijanym, powiększalnym widoku obrazu. W górnej części widoku obrazu znajduje się stały "widok przewodnika przycinania", który rysuje wskaźnik przycięcia, który użytkownik widzi. Zakładając, że widok prowadzący ma właściwości dla widocznego prostokąta (część do zachowania) i szerokości krawędzi (część do odrzucenia), można uzyskać prostokąt przycinający w taki sposób. Możesz użyć kategorii UIImage+Resize, aby wykonać rzeczywiste przycinanie.

CGRect cropGuide = self.cropGuideView.visibleRect; 
UIEdgeInsets edges = self.cropGuideView.edgeWidths; 
CGPoint cropGuideOffset = self.cropScrollView.contentOffset; 

CGPoint origin = CGPointMake(cropGuideOffset.x + edges.left, cropGuideOffset.y + edges.top); 
CGSize size = cropGuide.size; 
CGRect crop = { origin, size }; 

crop.origin.x = crop.origin.x/self.cropScrollView.zoomScale; 
crop.origin.y = crop.origin.y/self.cropScrollView.zoomScale; 
crop.size.width = crop.size.width/self.cropScrollView.zoomScale; 
crop.size.height = crop.size.height/self.cropScrollView.zoomScale; 

photo = [photo croppedImage:crop]; 
+0

Doskonała odpowiedź. Dzięki! –

+11

Czy możesz podać przykładowy projekt lub cokolwiek innego? –

+0

@Marc. Jak możesz mnie nauczyć, jak wykonywać, używając swift? –

3

Oto rozwiązanie dla ręcznego przycinania przez Ming Yang. https://github.com/myang-git/iOS-Image-Crop-View

Oferuje prostokątną ramkę, którą użytkownik może przesuwać lub przeciągać w celu dopasowania do wymaganej części obrazu w prostokącie. Należy pamiętać, że rozwiązanie to zawiera odwrotność zadanego pytania - pozwala zmieniać rozmiar prostokąta, ale ostatecznie przynosi pożądany rezultat.

Jest kodowany w Objective-C. Być może będziesz musiał albo zakodować go w Swift, albo po prostu zbudować nagłówek pomostowy, aby połączyć kod Objective-C z kodem Swift.

+1

lepiej niż jakakolwiek inna biblioteka, którą znajduję. –