UIView にはプロパティ subviews があります。配列をループすることをお勧めします。次に例を示します。
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
}