Ustaw wymiary dla interfejsu UIImagePickerController "przenieś i przeskaluj" cropbox

Jak "przesuń i skaluj ekran" określa wymiary swojego cropboxa?

Zasadniczo chciałbym ustawić stałą szerokość i wysokość dla "CropRect" i pozwolić użytkownikowi przenieść i przeskalować swój obraz, aby dopasować się do tego pola zgodnie z życzeniem.

Czy ktoś wie jak to zrobić? (Lub jeśli jest to w ogóle możliwe z UIImagePickerController)

Dzięki!

Author: Thomas K, 2012-01-28

4 answers

Niestety nie jest to możliwe z UIImagePickerController. Rozwiązaniem, które polecam, jest wyłączenie edycji dla selektora obrazów i obsługa go samodzielnie. Na przykład umieszczam obraz w przewijalnym widoku obrazu z możliwością powiększenia. Na górze widoku obrazu znajduje się stała pozycja "widok prowadnicy kadrowania", która rysuje wskaźnik kadrowania widziany przez użytkownika. Zakładając, że widok prowadnicy ma właściwości dla widocznego rect (część do zachowania) i szerokości krawędzi (część do odrzucenia), można uzyskać prostokąta kadrowania w ten sposób. Ty można użyć kategorii UIImage+Resize, aby wykonać rzeczywiste kadrowanie.

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];
 35
Author: Marc Charbonneau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-01 18:59:44

Trochę późno na grę, ale myślę, że to może być to, czego szukasz: https://github.com/gekitz/GKImagePicker

 24
Author: Yuriy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-07 03:18:57

Oto rozwiązanie do ręcznego kadrowania 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ć, aby pasowała do wymaganej części obrazu w prostokącie. Należy pamiętać, że to rozwiązanie nie odwraca zadanego pytania - pozwala na zmianę rozmiaru prostokąta, ale ostatecznie przynosi pożądany efekt.

Jest zakodowany w Objective-C. być może będziesz musiał albo zakodować go w Swift, albo po prostu zbudować pomostowy nagłówek do połączenia kodu Objective-C z kodem Swift.

 3
Author: Sriram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 15:12:00

Jest teraz późno niż późno, ale może się komuś przydać. To jest biblioteka, której użyłem dla swift (Wielkie dzięki dla Tim Oliver):

TOCropViewController

Jak opisano w pliku README w linku GitHub powyżej, za pomocą tej biblioteki można uzyskać przycięte obrazy w zdefiniowanym przez użytkownika trybie prostokątnym, a także w trybie okrągłym, np. do aktualizacji obrazu profilowego. poniżej przykładowy kod z GitHub:

func presentCropViewController {
  let image: UIImage = ... //Load an image

  let cropViewController = CropViewController(image: image)
  cropViewController.delegate = self
  present(cropViewController, animated: true, completion: nil)
}

func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
        // 'image' is the newly cropped version of the original image
    }
 1
Author: MFA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 11:38:50