ios - 保存 UIImageView 的位置

标签 ios objective-c

我有几个 UIImageView,用户可以拖动、缩放和旋转。我希望当用户导航到另一个 View 并返回时保留位置、大小和角度。我如何实现这一目标?

我使用以下代码来平移、旋转和缩放

- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];

[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
    CGPoint translation = [gestureRecognizer translationInView:[piece superview]];

    [piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
    [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}


- (void)rotatePiece:(UIRotationGestureRecognizer *)gestureRecognizer
{
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
    [gestureRecognizer view].transform = CGAffineTransformRotate([[gestureRecognizer view] transform], [gestureRecognizer rotation]);
    [gestureRecognizer setRotation:0];
}
}


- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
    [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
    [gestureRecognizer setScale:1];
}
}

最佳答案

根据您的需要,您可以创建方法,并将其作为另一个目标方法添加到所有手势识别器中。

例如

[panGestureRecognizer addTarget: self action: @selector(onGestureRecognizerEnd:)];
[rotationGestureRecognizer addTarget: self action: @selector(onGestureRecognizerEnd:)];
[pinchGestureRecognizer addTarget: self action: @selector(onGestureRecognizerEnd:)];


该方法的示例实现可以是:

- (void)onGestureRecognizerEnd: (UIGestureRecognizer *)gestureRecognizer
{
    switch ( gestureRecognizer.state )
    {
        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled:
        case UIGestureRecognizerStateFailed:
        {
            [self _saveViewPosition: gestureRecognizer.view];
            break;
        }
        default:
        {
            break;
        }
    }
}


_saveViewPosition: 方法,您可以像这样实现:

- (void)_saveViewPosition: (UIView *)view
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject: [NSKeyedArchiver archivedDataWithRootObject: [NSValue valueWithCGPoint: view.center]]
                 forKey: [self _centerKeyForView: view]];
    [defaults setObject: [NSKeyedArchiver archivedDataWithRootObject: [NSValue valueWithCGAffineTransform: view.transform]]
                 forKey: [self _transformKeyForView: view]];
}


欲了解更多信息,请查看Xcode project .

BR

关于ios - 保存 UIImageView 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862068/

相关文章:

php - 设置 php 变量 $userName = swift Encodable $_POST [‘userName’ ] 变量的正确语法或方法是什么?

ios - 如何在 UITableViewCell 上添加 rss 图片

objective-c - 是否可以在 UIAlertView 中显示图像?

objective-c - 为什么 ARC 保留方法参数?

ios - phonegap插件条码扫描器在iOS上不起作用

iphone - 为什么调用 insertRowsAtIndexPaths : call heightForRow for all rows?

ios - UIActivityViewController 的最佳实践

objective-c - bundle ID中的$ product是什么

ios - 一段时间后如何显示 UIAlertView?

objective-c - 在为 AdHoc 或 Distribution/Release 构建时,属性和 ivars 是否最初未设置为 nil 或零?