verdnatura-chat/ios/Pods/RSKImageCropper/RSKImageCropper/RSKImageCropViewController.h

353 lines
12 KiB
Objective-C
Executable File

//
// RSKImageCropViewController.h
//
// Copyright (c) 2014-present Ruslan Skorb, http://ruslanskorb.com/
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@protocol RSKImageCropViewControllerDataSource;
@protocol RSKImageCropViewControllerDelegate;
/**
Types of supported crop modes.
*/
typedef NS_ENUM(NSUInteger, RSKImageCropMode) {
RSKImageCropModeCircle,
RSKImageCropModeSquare,
RSKImageCropModeCustom
};
@interface RSKImageCropViewController : UIViewController
/**
Designated initializer. Initializes and returns a newly allocated view controller object with the specified image.
@param originalImage The image for cropping.
*/
- (instancetype)initWithImage:(UIImage *)originalImage;
/**
Initializes and returns a newly allocated view controller object with the specified image and the specified crop mode.
@param originalImage The image for cropping.
@param cropMode The mode for cropping.
*/
- (instancetype)initWithImage:(UIImage *)originalImage cropMode:(RSKImageCropMode)cropMode;
/**
Zooms to a specific area of the image so that it is visible.
@param rect A rectangle defining an area of the image.
@param animated YES if the scrolling should be animated, NO if it should be immediate.
*/
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated;
///-----------------------------
/// @name Accessing the Delegate
///-----------------------------
/**
The receiver's delegate.
@discussion A `RSKImageCropViewControllerDelegate` delegate responds to messages sent by completing / canceling crop the image in the image crop view controller.
*/
@property (weak, nonatomic, nullable) id<RSKImageCropViewControllerDelegate> delegate;
/**
The receiver's data source.
@discussion A `RSKImageCropViewControllerDataSource` data source provides a custom rect and a custom path for the mask and a custom movement rect for the image.
*/
@property (weak, nonatomic, nullable) id<RSKImageCropViewControllerDataSource> dataSource;
///--------------------------
/// @name Accessing the Image
///--------------------------
/**
The image for cropping.
*/
@property (strong, nonatomic) UIImage *originalImage;
/// -----------------------------------
/// @name Accessing the Mask Attributes
/// -----------------------------------
/**
The color of the layer with the mask. Default value is [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.7f].
*/
@property (copy, nonatomic) UIColor *maskLayerColor;
/**
The line width used when stroking the path of the mask layer. Default value is 1.0.
*/
@property (assign, nonatomic) CGFloat maskLayerLineWidth;
/**
The color to fill the stroked outline of the path of the mask layer, or nil for no stroking. Default valus is nil.
*/
@property (copy, nonatomic, nullable) UIColor *maskLayerStrokeColor;
/**
The rect of the mask.
@discussion Updating each time before the crop view lays out its subviews.
*/
@property (assign, readonly, nonatomic) CGRect maskRect;
/**
The path of the mask.
@discussion Updating each time before the crop view lays out its subviews.
*/
@property (copy, readonly, nonatomic) UIBezierPath *maskPath;
/// -----------------------------------
/// @name Accessing the Crop Attributes
/// -----------------------------------
/**
The mode for cropping. Default value is `RSKImageCropModeCircle`.
*/
@property (assign, nonatomic) RSKImageCropMode cropMode;
/**
The crop rectangle.
@discussion The value is calculated at run time.
*/
@property (readonly, nonatomic) CGRect cropRect;
/**
A value that specifies the current rotation angle of the image in radians.
@discussion The value is calculated at run time.
*/
@property (readonly, nonatomic) CGFloat rotationAngle;
/**
A floating-point value that specifies the current scale factor applied to the image.
@discussion The value is calculated at run time.
*/
@property (readonly, nonatomic) CGFloat zoomScale;
/**
A Boolean value that determines whether the image will always fill the mask space. Default value is `NO`.
*/
@property (assign, nonatomic) BOOL avoidEmptySpaceAroundImage;
/**
A Boolean value that determines whether the image will always bounce horizontally. Default value is `NO`.
*/
@property (assign, nonatomic) BOOL alwaysBounceHorizontal;
/**
A Boolean value that determines whether the image will always bounce vertically. Default value is `NO`.
*/
@property (assign, nonatomic) BOOL alwaysBounceVertical;
/**
A Boolean value that determines whether the mask applies to the image after cropping. Default value is `NO`.
*/
@property (assign, nonatomic) BOOL applyMaskToCroppedImage;
/**
A Boolean value that controls whether the rotaion gesture is enabled. Default value is `NO`.
@discussion To support the rotation when `cropMode` is `RSKImageCropModeCustom` you must implement the data source method `imageCropViewControllerCustomMovementRect:`.
*/
@property (assign, getter=isRotationEnabled, nonatomic) BOOL rotationEnabled;
/// -------------------------------
/// @name Accessing the UI Elements
/// -------------------------------
/**
The Title Label.
*/
@property (strong, nonatomic, readonly) UILabel *moveAndScaleLabel;
/**
The Cancel Button.
*/
@property (strong, nonatomic, readonly) UIButton *cancelButton;
/**
The Choose Button.
*/
@property (strong, nonatomic, readonly) UIButton *chooseButton;
/// -------------------------------------------
/// @name Checking of the Interface Orientation
/// -------------------------------------------
/**
Returns a Boolean value indicating whether the user interface is currently presented in a portrait orientation.
@return YES if the interface orientation is portrait, otherwise returns NO.
*/
- (BOOL)isPortraitInterfaceOrientation;
/// -------------------------------------
/// @name Accessing the Layout Attributes
/// -------------------------------------
/**
The inset of the circle mask rect's area within the crop view's area in portrait orientation. Default value is `15.0f`.
*/
@property (assign, nonatomic) CGFloat portraitCircleMaskRectInnerEdgeInset;
/**
The inset of the square mask rect's area within the crop view's area in portrait orientation. Default value is `20.0f`.
*/
@property (assign, nonatomic) CGFloat portraitSquareMaskRectInnerEdgeInset;
/**
The vertical space between the top of the 'Move and Scale' label and the top of the crop view in portrait orientation. Default value is `64.0f`.
*/
@property (assign, nonatomic) CGFloat portraitMoveAndScaleLabelTopAndCropViewTopVerticalSpace;
/**
The vertical space between the bottom of the crop view and the bottom of the 'Cancel' button in portrait orientation. Default value is `21.0f`.
*/
@property (assign, nonatomic) CGFloat portraitCropViewBottomAndCancelButtonBottomVerticalSpace;
/**
The vertical space between the bottom of the crop view and the bottom of the 'Choose' button in portrait orientation. Default value is `21.0f`.
*/
@property (assign, nonatomic) CGFloat portraitCropViewBottomAndChooseButtonBottomVerticalSpace;
/**
The horizontal space between the leading of the 'Cancel' button and the leading of the crop view in portrait orientation. Default value is `13.0f`.
*/
@property (assign, nonatomic) CGFloat portraitCancelButtonLeadingAndCropViewLeadingHorizontalSpace;
/**
The horizontal space between the trailing of the crop view and the trailing of the 'Choose' button in portrait orientation. Default value is `13.0f`.
*/
@property (assign, nonatomic) CGFloat portraitCropViewTrailingAndChooseButtonTrailingHorizontalSpace;
/**
The inset of the circle mask rect's area within the crop view's area in landscape orientation. Default value is `45.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeCircleMaskRectInnerEdgeInset;
/**
The inset of the square mask rect's area within the crop view's area in landscape orientation. Default value is `45.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeSquareMaskRectInnerEdgeInset;
/**
The vertical space between the top of the 'Move and Scale' label and the top of the crop view in landscape orientation. Default value is `12.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeMoveAndScaleLabelTopAndCropViewTopVerticalSpace;
/**
The vertical space between the bottom of the crop view and the bottom of the 'Cancel' button in landscape orientation. Default value is `12.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeCropViewBottomAndCancelButtonBottomVerticalSpace;
/**
The vertical space between the bottom of the crop view and the bottom of the 'Choose' button in landscape orientation. Default value is `12.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeCropViewBottomAndChooseButtonBottomVerticalSpace;
/**
The horizontal space between the leading of the 'Cancel' button and the leading of the crop view in landscape orientation. Default value is `13.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeCancelButtonLeadingAndCropViewLeadingHorizontalSpace;
/**
The horizontal space between the trailing of the crop view and the trailing of the 'Choose' button in landscape orientation. Default value is `13.0f`.
*/
@property (assign, nonatomic) CGFloat landscapeCropViewTrailingAndChooseButtonTrailingHorizontalSpace;
@end
/**
The `RSKImageCropViewControllerDataSource` protocol is adopted by an object that provides a custom rect and a custom path for the mask and a custom movement rect for the image.
*/
@protocol RSKImageCropViewControllerDataSource <NSObject>
/**
Asks the data source a custom rect for the mask.
@param controller The crop view controller object to whom a rect is provided.
@return A custom rect for the mask.
*/
- (CGRect)imageCropViewControllerCustomMaskRect:(RSKImageCropViewController *)controller;
/**
Asks the data source a custom path for the mask.
@param controller The crop view controller object to whom a path is provided.
@return A custom path for the mask.
*/
- (UIBezierPath *)imageCropViewControllerCustomMaskPath:(RSKImageCropViewController *)controller;
/**
Asks the data source a custom rect in which the image can be moved.
@param controller The crop view controller object to whom a rect is provided.
@return A custom rect in which the image can be moved.
*/
- (CGRect)imageCropViewControllerCustomMovementRect:(RSKImageCropViewController *)controller;
@end
/**
The `RSKImageCropViewControllerDelegate` protocol defines messages sent to a image crop view controller delegate when crop image was canceled or the original image was cropped.
*/
@protocol RSKImageCropViewControllerDelegate <NSObject>
/**
Tells the delegate that crop image has been canceled.
*/
- (void)imageCropViewControllerDidCancelCrop:(RSKImageCropViewController *)controller;
/**
Tells the delegate that the original image has been cropped. Additionally provides a crop rect and a rotation angle used to produce image.
*/
- (void)imageCropViewController:(RSKImageCropViewController *)controller didCropImage:(UIImage *)croppedImage usingCropRect:(CGRect)cropRect rotationAngle:(CGFloat)rotationAngle;
@optional
/**
Tells the delegate that the image has been displayed.
*/
- (void)imageCropViewControllerDidDisplayImage:(RSKImageCropViewController *)controller;
/**
Tells the delegate that the original image will be cropped.
*/
- (void)imageCropViewController:(RSKImageCropViewController *)controller willCropImage:(UIImage *)originalImage;
@end
NS_ASSUME_NONNULL_END