0

私は私UISCrollViewの選択した画像(複数/単一の画像)からインポートした画像のサムネイルを持っています。を入れたので、ビューの最初のロードでは、明らかにまだ画像を選択していないためです。したがって、ビューで更新しないことを選択した後。しかし、私のimages.countはデバッガーで更新されています。ビューで更新されていませんが、別の場所に移動してから再びに戻ると、画像がロードされ、画像を再度追加しても更新されません。なぜそうなのか。UIScrollVIewView2ControllerUIScrollViewImagePicker[self createScrollView];viewDidAppearUIScrollViewViewControllerView2ControllerUIScrollView

- (void)addImage:(UIImage *)image {
    [_images addObject:image];
    [_thumbs addObject:[image imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]];
}

- (void) createScrollView {

    [scrollView setNeedsDisplay];
    int row = 0;
    int column = 0;
    for(int i = 0; i < _thumbs.count; ++i) {

        UIImage *thumb = [_thumbs objectAtIndex:i];
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(column*60+10, row*60+10, 60, 75);
        [button setImage:thumb forState:UIControlStateNormal];
        [button addTarget:self 
                   action:@selector(buttonClicked:) 
         forControlEvents:UIControlEventTouchUpInside];
        button.tag = i; 

        [scrollView addSubview:button];

        if (column == 4) {
            column = 0;
            row++;
        } else {
            column++;
        }

    }
   [scrollView setContentSize:CGSizeMake(300, (row+1) * 60 + 10)];
}

- (void)viewDidAppear:(BOOL)animated
{
    [self createScrollView];
}

- (void)viewDidLoad
{ 
     [super viewDidLoad];
        self.slotBg = [[UIView alloc] initWithFrame:CGRectMake(43, 370, 310, 143)];
        CAGradientLayer *gradient = [CAGradientLayer layer];
        gradient.frame = self.slotBg.bounds;
        gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor grayColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
        [self.slotBg.layer insertSublayer:gradient atIndex:0];
        [self.view addSubview:self.slotBg];

        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,300.0f,130.0f)];
        [slotBg addSubview:self.scrollView];
            for(int i = 0; i <= 100; i++) 
            { 
                NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *documentsDir = [paths objectAtIndex:0];

                NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%d.png", i]]; 
                NSLog(@"savedImagePath=%@",savedImagePath);
                if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){ 
                    [self addImage:[UIImage imageWithContentsOfFile:savedImagePath]]; 
                    NSLog(@"file exists");
                } 
            } 
            NSLog(@"Count : %d", [_images count]);
}

EDIT:(この部分では、画像はビューから削除できません。しかし、私のNSDocumentDirectory場合は削除されています)

- (IBAction)buttonClicked:(id)sender {

        _clickedButton = (UIButton *)sender;
        UIAlertView *saveMessage = [[UIAlertView alloc] initWithTitle:@""
                                                              message:@"DELETE IMAGE?"
                                                             delegate:self
                                                    cancelButtonTitle:@"NO"
                                                    otherButtonTitles:@"YES", nil];
        [saveMessage show];  
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];


    if([title isEqualToString:@"YES"]) {
        NSLog(@"YES was selected.");
        UIButton *button = _clickedButton1;
        [button removeFromSuperview];
        [_images1 objectAtIndex:button.tag];
        [_images1 removeObjectAtIndex:button.tag];

        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"firstSlotImages%lu.png", button.tag]];
        [fileManager removeItemAtPath: fullPath error:NULL];
        NSLog(@"image removed");       
    }
4

2 に答える 2

0

createScrollView画像の配列を更新した後に呼び出す必要があります。メソッド[self createScrollView];の最後に移動してみてください。いずれにせよ、すべての画像を追加した後viewDidLoadに呼び出す必要があります。createScrollView

于 2012-06-25T02:27:44.223 に答える
0

viewDidAppear:ビューに移動したときにのみ呼び出されます。したがって、画像を「追加」しているときは、画像を_images配列に追加するだけで、画面に追加していないため表示されません。が再度呼び出されるため、ビューを離れて戻ってきたときに表示されますviewDidAppear:

これを修正するには、 を使用addImage:して現在のビューにも追加します。

- (void)addImage:(UIImage *)image {
    int row = ?;
    int column = ?;
    [_images addObject:image];
    [_thumbs addObject:[image imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]];
    UIImage *thumb = [_thumbs objectAtIndex:_thumbs.count-1];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(column*60+10, row*60+10, 60, 75);
    [button setImage:thumb 
            forState:UIControlStateNormal];
    [button addTarget:self 
               action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside];
    button.tag = _thumbs.count-1; 
    [scrollView addSubview:button];
}

もちろん、唯一の問題は、配置、別名列と行を決定する方法です。これを行うには、最後の親指のフレームを取得し、画面の境界に従ってどこに配置するかを考え出します。

別の修正

- (void)addImage:(UIImage *)image {
    [_images addObject:image];
    [_thumbs addObject:[image imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]];
    [self createScrollView];
}
于 2012-06-25T02:27:35.063 に答える