建议水平滚动视图IOS

时间:2012-03-05 22:11:02

标签: objective-c ios ios5

我正在尝试创建水平滚动视图。每个视图包含一个图像。 [done]

<击>

最初,当应用程序打开时,我会显示几个图像,即3,因此用户可以在图像之间来回滚动。 [done]

但是我希望能够转到另一个视图控制器并选择另外两个图像(例如两个),并在滚动视图中显示五个图像,而不是最初显示3个。

如何做到这一点? “重新刷新”初始滚动视图?

<击>的更新 我应该使用委托来进行视图控制器之间的通信吗?或者这是怎么做的? 1个主控制器,其他包含图像选择?

以上部分以及文章here更多解释。(不是广告,我希望它也可以帮助某人)。

Bounty更新第1部分

我认为现在我找到了代理人的方式,我还有其他问题,我找不到答案,我看到的所有例子都是关于更新表格视图。

赏金第2部分: 如果我在视图控制器中有一个滚动视图,在滚动视图中有一些nsimages。即:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *images = ...some images array;
    for (int i = 0; i < images.count; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        UIImageView *subview = [[UIImageView alloc] initWithFrame:frame];
        subview.image = [images objectAtIndex:i];
        [self.scrollView addSubview:subview];
    }

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * images.count, self.scrollView.frame.size.height);
}

让我说我的视图控制器实现了一些委托方法didAddImagedidRemoveImage

意味着约images数组会更新。

实际赏金问题:

如何实际“告诉”视图控制器,O.K现在您的滚动视图还有一个要显示的图像,请重新刷新还是重新加载?

如果我要有一个表视图而不是滚动视图并插入图像我会这样做(在我的委托方法中):

-(void) mockDelegatetablemethod:(...) ...{
 [self.images addObject:image];
    NSIndexPath *indexPath = 
     [NSIndexPath indexPathForRow:[self.images count] - 1 
       inSection:0];
    [self.tableView insertRowsAtIndexPaths:
      [NSArray arrayWithObject:indexPath] 
       withRowAnimation:UITableViewRowAnimationAutomatic];
    [self dismissViewControllerAnimated:YES completion:nil];
}

如何对scrollview进行此操作?

赏金更新第3部分:

这是上面描述的“简单”情况,当然我还必须支持删除图像,以及是否要删除所有图像并添加一些新图像。

3 个答案:

答案 0 :(得分:10)

  

如何实际“告诉”视图控制器,O.K现在是你的   scrollview还有一个要显示的图像,请重新刷新还是重新加载?

好吧,您只需将新图像添加为滚动视图的子视图。如下所示:

- (void)addImage:(UIImage*)image {
    [images addObject:image];

    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * images.count;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UIImageView *subview = [[UIImageView alloc] initWithFrame:frame];
    subview.image = image;
    [self.scrollView addSubview:subview];

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * images.count, self.scrollView.frame.size.height);
}

或者您可以通过删除所有子视图然后重新添加图像数组中的所有图像来使用“重置”滚动视图的方法。然后在viewDidLoad中调用此方法,而不是在那里调用代码,这样就不会重复代码。

基本上,这里没有银弹。你自己滚动。

答案 1 :(得分:2)

您需要使图像滚动器成为可以告诉您加载某些图像的类。您需要对现有图像滚动条的引用,将该指针传递到您的其他“选择更多图像”控制器。然后“选择更多图像”控制器可以告诉图像滚动器有一个新的图像列表。

答案 2 :(得分:2)

这已经由Apple在他们的iOS示例项目“PhotoScroller”中实现。它也有视图重用。他们甚至还有关于此的WWDC 2010视频。我认为它的高级滚动视图技术或使用滚动视图设计应用程序。 不应该很难移植到mac