Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIScrollView未正确加载/更新_Iphone_Ios_Xcode - Fatal编程技术网

Iphone UIScrollView未正确加载/更新

Iphone UIScrollView未正确加载/更新,iphone,ios,xcode,Iphone,Ios,Xcode,我的UISCrollView有问题,UISCrollView在我的View2Controller中,我的UISCrollView有我从ImagePicker拾取的图像(多个/单个图像)导入的图像缩略图。我已经把我的[self-createScrollView]在视图中出现了,因此在我第一次加载视图时,只有UIScrollView,这显然是因为我还没有拾取图像。因此,在我选择之后,我认为它不会更新。但是my images.count正在我的调试器中更新。它没有在视图中更新,但当我转到另一个View

我的
UISCrollView
有问题,
UISCrollView
在我的
View2Controller
中,我的
UISCrollView
有我从
ImagePicker
拾取的图像(多个/单个图像)导入的图像缩略图。我已经把我的
[self-createScrollView]
视图中出现了
,因此在我第一次加载视图时,只有
UIScrollView
,这显然是因为我还没有拾取图像。因此,在我选择之后,我认为它不会更新。但是my images.count正在我的调试器中更新。它没有在视图中更新,但当我转到另一个
ViewController
然后再次返回到
View2Controller
,它会在我的
UIScrollView
中加载图像,然后当我再次添加图像时,它不会更新。为什么会这样

- (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]);
}

viewdide出现:
仅在转到视图时调用。因此,当您“添加”图像时,您只是将它们添加到
\u images
数组中,它们不会显示,因为您没有将它们添加到屏幕中。它们在您离开视图并返回时显示,因为再次调用了
viewdide:

要解决此问题,请使用
添加图像:
将其添加到当前视图中

- (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];
}

更新图像数组后,需要调用
createScrollView
。也许可以尝试移动
[self-createScrollView]
viewDidLoad
方法的末尾?无论哪种方式,您都需要在添加所有图像后调用
createScrollView

您需要扩展添加图像。或者另一种解决方案是在
addImage:
的末尾调用
createScrollView
,您已经发布了
addImage:
,这是您给我们的代码。我假设您已经在想要添加image=P时调用了它。我刚刚添加了
addImage:
还应该将图像添加到视图中,而不仅仅是数组。您应该始终确保视图和支持它的数据结构是一致的。因此,如果添加到数据结构中,请添加到视图中。如果您从数据结构中删除,请从视图中删除。您有两个选择,删除所有拇指,然后读取,或者使用我的第一个解决方案,即只将要添加的一个拇指添加到阵列中。我想我在删除它时遇到了问题。因为每个拇指都被分配到一个按钮,所以u显示的内容与旧按钮重叠。我不知道。你还有什么解决办法吗?我不明白问题出在哪里,你还得详细说明。考虑用更多的细节来修改你的问题。当你已经有一个问题时,为什么需要创建一个新的问题:同样的问题?Kobe.o4-这是怎么一回事?这是一个单独的问题,但你拿走了我的答案,因为我没有回答你还没有发布的问题?无论如何,
[\u images1 objectAtIndex:button.tag]是怎样的;[_images1removeObjectatindex:button.tag]这个工作吗?button.tag是否有适当的索引?此外,您为什么收集对象而不使用它。这样做不是更好吗?@MichaelBoselowitz,很抱歉。但是
[\u images1 removeObject:按钮]仍然没有在我的视图中删除。
- (void)addImage:(UIImage *)image {
    [_images addObject:image];
    [_thumbs addObject:[image imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]];
    [self createScrollView];
}