1

画像付きの複数の UIImageView を追加するテスト アプリを作成しています。ユーザーは、これらの画像を移動および回転させることができます。UIGestureRecognizers を配置して動作させていますが、ユーザーが画面上で画像を残した場所も追跡する必要があります。そうすれば、アプリを閉じて戻ってきたときに、画像を配置した場所が記憶されます。

これには NSUserDefaults を使用する必要があることはわかっていますが、私の質問は、画面上の非常に大量の UIImageView の場所を追跡する方法です。どうにかしてそれらの x/y 座標を取得し、それを NSUserDefaults に保存する必要があると思います。

誰でもこれを行う方法について提案がありますか?

-ブライアン

4

1 に答える 1

5

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
}
于 2012-05-27T16:25:14.023 に答える