【问题标题】:NSUserDefaults - Saving UIImageView PositionNSUserDefaults - 保存 UIImageView 位置
【发布时间】:2013-06-29 19:20:30
【问题描述】:

在我的应用程序中,我有一个 UIImageView 和一个 UIButton。 UIImageView 有一个 UIPanGestureRecognizer,可以在屏幕上拖动。我写了:

int defaultBallLocation = ball.center; 在我的- (IBAction)saveButton

Xcode 说“不能将 CGPoint 与 int 关联”。

那么,如何通过按“保存”在屏幕上保存球(UIImageView)的位置,然后通过 NSUserDefaults 按“加载”来加载保存的位置?我以前使用过 NSUserDefaults,但只使用了 UISegmentedController。谢谢!

【问题讨论】:

    标签: ios uiimageview loading nsuserdefaults


    【解决方案1】:

    另一种选择,您可以将其存储为字符串:

    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    // Set
    [userDefaults setObject:NSStringFromCGPoint(yourPoint) forKey:@"pointPosition"];
    // Save
    [userDefaults synchronize];
    // Get
    CGPoint thePoint = CGPointFromString([userDefaults objectForKey:@"pointPosition"]);
    

    【讨论】:

      【解决方案2】:

      您正在尝试用 CGPoint 结构分配 int,这是不可能的。

      要将其保存到NSUserDefaults,您可以这样做:

      CGFloat x = ball.center.x;
      CGFloat y = ball.center.y;
      
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      [defaults setFloat:x forKey:@"x"];
      [defaults setFloat:y forKey:@"y"];
      

      【讨论】:

      • 这个答案是正确的,但只是为了获取更多信息,您可以通过执行 int defaultBallLocationXCoord = ball.center.x (or ball.center.y) 以 int 访问每个点
      • 谢谢,但我该如何加载?
      • @Chase 你读过NSUserDefaults的API文档吗?您写道您之前曾与NSUserDefaults 合作过,因此您应该知道如何从中加载某些内容。如果没有,那么这对您来说是一个好习惯。
      • 是的,但我只加载了整数,没有加载 CGPoints。
      • @PeterWarbo 此解决方案不起作用,因为您无法将 NSValue 对象存储在 NSUserDefaults 中。它没有在NSUserDefaults 的文档中列为有效对象,我只是尝试确认并确定它会导致控制台出错并且该值被忽略。正确的解决方案是使用两个不同的键存储CGPoint 的两个值。
      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多