IOS。 ScrollView仅显示带图像的一个子视图

时间:2013-02-27 12:12:41

标签: ios objective-c cocoa-touch

我有一个UIScrollView,我想从flickr加载图像列表。然后我希望照片显示的内容与本地股票iphone照片应用程序一样,您可以滚动浏览照片。

这是我的代码

- (void)viewDidLoad
{
    [super viewDidLoad];

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

        UIView *subview = [[UIView alloc] initWithFrame:frame];


        [self returnImageFromFlickr:[self.urlArray objectAtIndex:i]];

        UIImageView *imageView = self.largePhoto;

        [subview addSubview:imageView];
        [self.scrollView addSubview:subview];

    }

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

-(void)returnImageFromFlickr:(NSURL *)url {



    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [self.largePhoto setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {



        [self.largePhoto setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

    }];

}

正在播放的内容只显示最后一张图片。

我按照我的理解尝试了你的解决方案并得到了这个。这不是照片。只是一个白色的屏幕。在

的returnImageFromFlicrk方法中加上警告

[imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@“placeholder.png”]];

说  在此块中强烈捕获'imageView'可能会导致保留周期

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

   /*for (int i = 0; i < self.urlArray.count; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        UIView *subview = [[UIView alloc] initWithFrame:frame];


        [self returnImageFromFlickr:[self.urlArray objectAtIndex:i]];

        UIImageView *imageView = self.largePhoto;

        [subview addSubview:imageView];
        //subview.backgroundColor = [colors objectAtIndex:i];
        [self.scrollView addSubview:subview];

    }*/

    for (int i = 0; i < self.urlArray.count; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;
        UIImageView *imageView = [[UIImageView alloc] init];
        [self returnImageFromFlickr:[self.urlArray objectAtIndex:i] imageview:imageView];

        [self.scrollView addSubview:imageView];

    }

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

-(void)returnImageFromFlickr:(NSURL *)url imageview:(UIImageView *)imageView {
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [imageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
        [imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

    }];


}

3 个答案:

答案 0 :(得分:0)

您没有为Scroll内容平移设置正确的参数,这就是为什么您想要的所有图像都不会显示在scrollView中的原因。尝试更新ScrollView的内容平移以适合所有图像的宽度。像

  

self.scrollView.contentSize = CGSizeMake(宽度,高度);

在这种情况下,高度将是单个图像的高度,宽度将是(单个图像的宽度*图像总数)

答案 1 :(得分:0)

你覆盖了self.largePhoto,你需要在returnImageFromFlickr中设置你的imageView

试试这个

UIImageView *imageView = [[UIImageView alloc] init];
[self returnImageFromFlickr:[self.urlArray objectAtIndex:i] imageview:imageView];

-(void)returnImageFromFlickr:(NSURL *)url imageview:(UIImageView *)imageView {
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [imageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
        [imageView setImage:image];

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

}];

}

答案 2 :(得分:0)

我需要做的就是将代码从viewDidLoad移到viewDidApear