iOS 5屏幕上对象的位置

时间:2012-05-08 21:47:15

标签: ios5 uiimageview nsuserdefaults

我正在创建一个测试应用程序,它将添加带有图像的多个UIImageViews。用户将能够移动和旋转这些图像。我有UIGestureRecognizers到位和工作,但我还需要跟踪用户在屏幕上留下图像的位置。这样,如果他们关闭应用程序并返回,他们放置图像的位置将被记住。

我知道我应该使用NSUserDefaults,但我的问题是如何在屏幕上跟踪可能有大量UIImageView的位置。我假设我需要以某种方式获取它们的x / y坐标并使用NSUserDefaults存储它。

有人建议如何做到这一点吗?

-Brian

1 个答案:

答案 0 :(得分:5)

UIView有一个属性子视图。我建议循环遍历数组。这是一个例子:

NSMutableDictionary *coordinates = [[NSMutableDictionary alloc] init];
for (id subview in view.subviews) {
    if ([subview isKindOfClass:[UIImageView class]]) {
        [coordinates setObject:[NSValue valueWithPoint:subview.frame.origin] forKey:imageViewIdentifier];
    }
}
//store coordinates in NSUserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:coordinates forKey:@"ImageViewCoordinates"];
[userDefaults synchronize];

您可以使用一些标识符来节省内存,而不是将整个图像视图存储为坐标字典中的键。该对象是NSValue,因此要从中获取x / y值,您可以使用[[value pointValue] x][[value pointValue] y]

这是一个回读数据(并将视图恢复正常)的示例。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *coordinates = [userDefaults dictionaryForKey:@"ImageViewCoordinates"];
//Key can be any type you want
for (NSString *key in coordinates.allKeys) {
    UIImageView *imageView;
    //Set UIImageView properties based on the identifier
    imageView.frame.origin = [coordinates objectForKey:key];
    [self.view addSubview:imageView];
    //Add gesture recognizers, and whatever else you want
}