Pre*_*van 5 cocoa-touch objective-c uiimageview uigesturerecognizer ios
如何使用旋转手势NSUndoManager来旋转UIImageView?这是我的旋转代码。
- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan) {
prevRotation = 0.0;
}
float thisRotate = recognizer.rotation - prevRotation;
prevRotation = recognizer.rotation;
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, thisRotate);
CGPoint lastpoint = point;
}
Run Code Online (Sandbox Code Playgroud)
首先,阅读\xe2\x80\x9c在 iPhone 上使用撤消\xe2\x80\x9d。确保您已设置undoManager在响应程序链中的某个位置(可能在视图控制器中)设置了该属性。
我们只想在手势结束时推送撤消操作。但是当我们推动撤消操作时,我们需要知道手势开始时视图的变换。创建一个实例变量来保存原始变换:
\n\n@implementation YourViewController {\n CGAffineTransform _originalImageViewTransform;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n接下来,我们需要一个方法来推送撤消操作并设置视图的变换:
\n\n- (void)setTransform:(CGAffineTransform)newTransform ofView:(UIView *)view\n undoTransform:(CGAffineTransform)undoTransform\n{\n // If I\'m called because the gesture ended, this pushes an undo action.\n // If I\'m called because the user requested an undo, this pushes a redo action.\n [[self.undoManager prepareWithInvocationTarget:self]\n setTransform:undoTransform ofView:view undoTransform:newTransform];\n\n // Now actually set the transform.\n view.transform = newTransform;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n你的handleRotate:方法需要检测手势的状态并采取适当的操作。
- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {\n UIView *view = recognizer.view;\n UIGestureRecognizerState state = recognizer.state;\n\n if (state == UIGestureRecognizerStateCancelled) {\n view.transform = _originalImageViewTransform;\n return;\n }\n\n if (state == UIGestureRecognizerStateBegan) {\n _originalImageViewTransform = view.transform;\n }\n\n CGAffineTransform transform = view.transform;\n transform = CGAffineTransformRotate(transform, recognizer.rotation);\n recognizer.rotation = 0; // This line means we don\'t need prevRotation\n\n if (state == UIGestureRecognizerStateEnded) {\n [[ The gesture ended, so push an undo action before setting the transform.\n [self setTransform:transform ofView:view undoTransform:_originalImageViewTransform];\n } else {\n // The gesture changed but didn\'t end, so don\'t push an undo action.\n view.transform = transform;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |