0

私はスロットマシンアプリを使用して作成してiCarouselいます。この画像iCarouselからの画像が含まれています。これが私のアプリの仕組みです。ユーザーがボタンを押すと回転します。停止したら、3秒間表示してから削除します。NSDocumentDirectoryImagePickeriCarousel

私の問題は、別のビューに移動すると、削除されたインデックス/アイテムが再び表示されることです。別のビューに移動してもアレイを維持する方法。配列の保存など、アプリが再起動されるまで、削除されたインデックス/アイテムは表示されません。助けてくれてありがとう。

//私の配列

- (void)viewDidLoad
{
    self.images = [NSMutableArray new];  
    for(int i = 0; i <= 100; i++) 
    { 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];

        NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png", i]]; 
            if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){ 
                [images addObject:[UIImage imageWithContentsOfFile:savedImagePath]]; 
            } 
    } 
}



- (void)viewWillAppear:(BOOL)animated {    
    spinButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [spinButton addTarget:self action:@selector(spin) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:spinButton];
}
- (void) carouselDidEndScrollingAnimation:(iCarousel *)carousel{
    [NSTimer scheduledTimerWithTimeInterval:0.56 //this arranges the duration of the scroll
                                     target:self
                                   selector:@selector(deleteItem)
                                   userInfo:nil
                                    repeats:NO];   
}

//スピンしてメソッドを削除します

- (void)spin {
        [carousel scrollByNumberOfItems:-35 duration:10.7550f];
}

-(void) deleteItem {
    //Removes the object chosen 
        NSInteger index = carousel.currentItemIndex;
        [carousel removeItemAtIndex:index animated:YES];
        [images removeObjectAtIndex:index];
}

必要なのは、インデックス/アイテムを削除すると、他のビューに移動しても一時的に表示されないことです。ビューは、アプリを閉じて再度開いた後にのみ再開されます

4

2 に答える 2

1

あなたの問題はNSMutableArray、ビューに入るたびに画像を作成していることです。

@Salehが言ったように、ビューコントローラーの外に配列を配置する必要があります。でそれを行うにはappDelegate、彼が提案していたように、次のようにします。

AppDelegate.hで次のように宣言します。

@property( strong, nonatomic) NSMutableArray *images;

AppDelegate.m:

@synthesize images;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Read the images after the existing code ....

    self.images = [NSMutableArray array];
    for(int i = 0; i <= 100; i++) 
    { 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];

        NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png", i]]; 
        if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){ 
            [images addObject:[UIImage imageWithContentsOfFile:savedImagePath]]; 
        } 
    }     

    return YES;
}

次に、ViewController.mで:

#import "AppDelegate.h"

そしてあなたの方法を変更してくださいviewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.images = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).images;
}

これはうまくいくはずです。

于 2012-06-25T21:20:13.180 に答える
0

配列の 1 つのインスタンスを使用します。初期化は 1 回だけです。配列を appDelegate に配置すると、アプリ全体でシングルトンになります。

于 2012-06-25T04:50:56.597 に答える