
Ein Bild Cropper für iOS wie in der Kontakt -App mit Unterstützung für die Landschaftsausrichtung.
RSKIMAGECROPPER benötigt iOS 12.0 oder höher.
Um das RSKImageCropper -Paket zu Ihrem Xcode -Projekt hinzuzufügen, wählen Sie Datei> Swift -Pakete> Paketabhängigkeit hinzufügen und geben Sie die Repository -URL ein.
https://github.com/ruslanskorb/RSKImageCropper.git
Fügen Sie den Pod RSKImageCropper zu Ihrer Podfile hinzu.
pod 'RSKImageCropper'
Führen Sie pod install vom Terminal aus und öffnen Sie .xcworkspace -Datei Ihrer App, um Xcode zu starten.
Importieren Sie den Header RSKImageCropper.h . In der Regel sollte dies als #import <RSKImageCropper/RSKImageCropper.h>
Fügen Sie das Projekt ruslanskorb/RSKImageCropper zu Ihrem Cartfile hinzu.
github "ruslanskorb/RSKImageCropper"
Führen Sie carthage update aus und befolgen Sie die zusätzlichen Schritte, um die iOS- und/oder Mac -Frameworks in Ihr Projekt hinzuzufügen.
Importieren Sie das RSKIMAGECROPPER -Framework/das Modul.
@import RSKImageCropper#import <RSKImageCropper/RSKImageCropper.h> Importieren Sie den Klassenkopf.
# import < RSKImageCropper/RSKImageCropper.h >Erstellen Sie einfach einen Ansichtskontroller für das Bildfoto und setzen Sie den Delegierten.
- ( IBAction )onButtonTouch:(UIButton *)sender
{
UIImage *image = [UIImage imageNamed: @" image " ];
RSKImageCropViewController *imageCropViewController = [[RSKImageCropViewController alloc ] initWithImage: image];
imageCropViewController. delegate = self;
[ self .navigationController pushViewController: imageCropViewController animated: YES ];
} RSKImageCropViewControllerDelegate bietet drei Delegate -Methoden. Um sie zu verwenden, implementieren Sie den Delegierten in Ihrem Ansichtscontroller.
@interface ViewController () <RSKImageCropViewControllerDelegate>Implementieren Sie dann die Delegiertenfunktionen.
// Crop image has been canceled.
- ( void )imageCropViewControllerDidCancelCrop:(RSKImageCropViewController *)controller
{
[ self .navigationController popViewControllerAnimated: YES ];
}
// The original image has been cropped. Additionally provides a rotation angle used to produce image.
- ( void )imageCropViewController:(RSKImageCropViewController *)controller
didCropImage:(UIImage *)croppedImage
usingCropRect:( CGRect )cropRect
rotationAngle:( CGFloat )rotationAngle
{
self. imageView . image = croppedImage;
[ self .navigationController popViewControllerAnimated: YES ];
}
// The original image will be cropped.
- ( void )imageCropViewController:(RSKImageCropViewController *)controller
willCropImage:(UIImage *)originalImage
{
// Use when `applyMaskToCroppedImage` set to YES.
[SVProgressHUD show ];
} RSKImageCropViewControllerDataSource bietet drei Datenquellenmethoden. Die Methode imageCropViewControllerCustomMaskRect: fragt die Datenquelle um ein benutzerdefiniertes Richt für die Maske. Die Methode imageCropViewControllerCustomMaskPath: fragt die Datenquelle um einen benutzerdefinierten Pfad für die Maske. Die Methode imageCropViewControllerCustomMovementRect: fragt die Datenquelle nach einem benutzerdefinierten Rekt, in dem das Bild verschoben werden kann. Um sie zu verwenden, implementieren Sie die Datenquelle in Ihrem Ansichtscontroller.
@interface ViewController () <RSKImageCropViewControllerDataSource>Implementieren Sie dann die Datenquellenfunktionen.
// Returns a custom rect for the mask.
- ( CGRect )imageCropViewControllerCustomMaskRect:(RSKImageCropViewController *)controller
{
CGSize aspectRatio = CGSizeMake ( 16 . 0f , 9 . 0f );
CGFloat viewWidth = CGRectGetWidth (controller. view . frame );
CGFloat viewHeight = CGRectGetHeight (controller. view . frame );
CGFloat maskWidth;
if ([controller isPortraitInterfaceOrientation ]) {
maskWidth = viewWidth;
} else {
maskWidth = viewHeight;
}
CGFloat maskHeight;
do {
maskHeight = maskWidth * aspectRatio. height / aspectRatio. width ;
maskWidth -= 1 . 0f ;
} while (maskHeight != floor (maskHeight));
maskWidth += 1 . 0f ;
CGSize maskSize = CGSizeMake (maskWidth, maskHeight);
CGRect maskRect = CGRectMake ((viewWidth - maskSize. width ) * 0 . 5f ,
(viewHeight - maskSize. height ) * 0 . 5f ,
maskSize. width ,
maskSize. height );
return maskRect;
}
// Returns a custom path for the mask.
- (UIBezierPath *)imageCropViewControllerCustomMaskPath:(RSKImageCropViewController *)controller
{
CGRect rect = controller. maskRect ;
CGPoint point1 = CGPointMake ( CGRectGetMinX (rect), CGRectGetMaxY (rect));
CGPoint point2 = CGPointMake ( CGRectGetMaxX (rect), CGRectGetMaxY (rect));
CGPoint point3 = CGPointMake ( CGRectGetMaxX (rect), CGRectGetMinY (rect));
CGPoint point4 = CGPointMake ( CGRectGetMinX (rect), CGRectGetMinY (rect));
UIBezierPath *rectangle = [UIBezierPath bezierPath ];
[rectangle moveToPoint: point1];
[rectangle addLineToPoint: point2];
[rectangle addLineToPoint: point3];
[rectangle addLineToPoint: point4];
[rectangle closePath ];
return rectangle;
}
// Returns a custom rect in which the image can be moved.
- ( CGRect )imageCropViewControllerCustomMovementRect:(RSKImageCropViewController *)controller
{
if (controller. rotationAngle == 0 ) {
return controller. maskRect ;
} else {
CGRect maskRect = controller. maskRect ;
CGFloat rotationAngle = controller. rotationAngle ;
CGRect movementRect = CGRectZero ;
movementRect. size . width = CGRectGetWidth (maskRect) * fabs ( cos (rotationAngle)) + CGRectGetHeight (maskRect) * fabs ( sin (rotationAngle));
movementRect. size . height = CGRectGetHeight (maskRect) * fabs ( cos (rotationAngle)) + CGRectGetWidth (maskRect) * fabs ( sin (rotationAngle));
movementRect. origin . x = CGRectGetMinX (maskRect) + ( CGRectGetWidth (maskRect) - CGRectGetWidth (movementRect)) * 0 . 5f ;
movementRect. origin . y = CGRectGetMinY (maskRect) + ( CGRectGetHeight (maskRect) - CGRectGetHeight (movementRect)) * 0 . 5f ;
movementRect. origin . x = floor ( CGRectGetMinX (movementRect));
movementRect. origin . y = floor ( CGRectGetMinY (movementRect));
movementRect = CGRectIntegral (movementRect);
return movementRect;
}
} Erstellen und führen Sie das RSKImageCropperExample -Projekt in Xcode aus, um RSKImageCropper in Aktion zu sehen. Viel Spaß. Gabel und Pull -Anfragen senden. Finden Sie Haken für die Anpassung heraus.
RSKImageCropper benötigt kein Datenschutzmanifest. Laut Informationen von Apple sollten wir es vermeiden, unseren Frameworks ein leeres Datenschutz hinzuzufügen.
Ruslan Skorb
Dieses Projekt ist im Rahmen der MIT -Lizenz verfügbar. Weitere Informationen finden Sie in der Lizenzdatei. Die Zuordnung durch Verknüpfung mit der Projektseite wird geschätzt.