123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- //
- // TOCropView.h
- //
- // Copyright 2015 Timothy Oliver. All rights reserved.
- //
- // 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>
- @class TOCropView;
- @protocol TOCropViewDelegate <NSObject>
- - (void)cropViewDidBecomeResettable:(TOCropView *)cropView;
- - (void)cropViewDidBecomeNonResettable:(TOCropView *)cropView;
- @end
- @interface TOCropView : UIView
- /**
- The image that the crop view is displaying. This cannot be changed once the crop view is instantiated.
- */
- @property (nonatomic, strong, readonly) UIImage *image;
- /**
- A delegate object that receives notifications from the crop view
- */
- @property (nonatomic, weak) id<TOCropViewDelegate> delegate;
- /**
- Whether the user has manipulated the crop view to the point where it can be reset
- */
- @property (nonatomic, readonly) BOOL canReset;
- /**
- The frame of the cropping box on the crop view
- */
- @property (nonatomic, readonly) CGRect cropBoxFrame;
- /**
- The frame of the entire image in the backing scroll view
- */
- @property (nonatomic, readonly) CGRect imageViewFrame;
- /**
- Inset the workable region of the crop view in case in order to make space for accessory views
- */
- @property (nonatomic, assign) UIEdgeInsets cropRegionInsets;
- /**
- Disable the dynamic translucency in order to smoothly relayout the view
- */
- @property (nonatomic, assign) BOOL simpleMode;
- /**
- When the cropping box is locked to its current size
- */
- @property (nonatomic, assign) BOOL aspectLockEnabled;
- /**
- True when the height of the crop box is bigger than the width
- */
- @property (nonatomic, readonly) BOOL cropBoxAspectRatioIsPortrait;
- /**
- The rotation angle of the crop view (Will always be negative as it rotates in a counter-clockwise direction)
- */
- @property (nonatomic, assign, readonly) NSInteger angle;
- /**
- Hide all of the crop elements for transition animations
- */
- @property (nonatomic, assign) BOOL croppingViewsHidden;
- /**
- In relation to the coordinate space of the image, the frame that the crop view is focussing on
- */
- @property (nonatomic, readonly) CGRect croppedImageFrame;
- /**
- Set the grid overlay graphic to be hidden
- */
- @property (nonatomic, assign) BOOL gridOverlayHidden;
- /**
- Create a new instance of the crop view with the supplied image
- */
- - (instancetype)initWithImage:(UIImage *)image;
- /**
- When performing large size transitions (eg, orientation rotation),
- set simple mode to YES to temporarily graphically heavy effects like translucency.
-
- @param simpleMode Whether simple mode is enabled or not
-
- */
- - (void)setSimpleMode:(BOOL)simpleMode animated:(BOOL)animated;
- /**
- When performing a screen rotation that will change the size of the scroll view, this takes
- a snapshot of all of the scroll view data before it gets manipulated by iOS.
- Please call this in your view controller, before the rotation animation block is committed.
- */
- - (void)prepareforRotation;
- /**
- Performs the realignment of the crop view while the screen is rotating.
- Please call this inside your view controller's screen rotation animation block.
- */
- - (void)performRelayoutForRotation;
- /**
- Reset the crop box and zoom scale back to the initial layout
-
- @param animated The reset is animated
- */
- - (void)resetLayoutToDefaultAnimated:(BOOL)animated;
- /**
- Enables an aspect ratio lock where the crop box will always scale at a specific ratio.
-
- @param aspectRatio The aspect ratio (For example 16:9 is 16.0f/9.0f). Specify 0.0f to lock to the image's original aspect ratio
- @param animated Whether the locking effect is animated
- */
- - (void)setAspectLockEnabledWithAspectRatio:(CGSize)aspectRatio animated:(BOOL)animated;
- /**
- Rotates the entire canvas to a 90-degree angle
-
- @param angle The angle in which to rotate (May be 0, 90, 180, 270)
- @param animated Whether the transition is animated
- */
- - (void)rotateImageNinetyDegreesAnimated:(BOOL)animated;
- /**
- Animate the grid overlay graphic to be visible
- */
- - (void)setGridOverlayHidden:(BOOL)gridOverlayHidden animated:(BOOL)animated;
- /**
- Animate the cropping component views to become visible
- */
- - (void)setCroppingViewsHidden:(BOOL)hidden animated:(BOOL)animated;
- @end
|