如何在iOS下以编程方式在UIScrollView中添加UIImageVIew?

时间:2016-03-02 13:32:37

标签: objective-c uiscrollview uiimageview uiscrollviewdelegate

在我的应用程序中,我想在UIScrollview中显示图像。在这里,我没有得到scrollview的高度和宽度作为图像的高度和宽度。如何获得scrollview(高,宽)到我的图像视图(高度和宽度)? 现在我已经尝试了。

for (int i=0; i<imageArray.count; i++)
{
    NSString *str = [imageArray objectAtIndex:i];
    NSString *bannerImageURL = [NSString stringWithFormat:@"http:url/%@", str];
    CGFloat myOrigin = i * self.view.frame.size.width;
    UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(myOrigin, 0, self.view.frame.size.width,imgScrollView.frame.size.height)];
    myImageView.contentMode = UIViewContentModeScaleAspectFit;
    myImageView.clipsToBounds = YES;
    myImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:bannerImageURL]]];

    imgScrollView.contentSize = CGSizeMake(self.view.frame.size.width * imageArray.count,                                                               self.view.frame.size.height);


    CGPoint scrollPoint = CGPointMake(0, 0);

    [imgScrollView setContentOffset:scrollPoint animated:YES];
    imgScrollView.delegate = self;
    [imgScrollView addSubview:myImageView]; 

这是我的代表方法。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[imgScrollView setContentOffset: CGPointMake(imgScrollView.contentOffset.x,0)];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{

CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
NSLog(@"Scrolling - You are now on page %i",page);
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                 withVelocity:(CGPoint)velocity
  targetContentOffset:(inout CGPoint *) targetContentOffset
NS_AVAILABLE_IOS(5_0)
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
NSLog(@"Dragging - You are now on page %i",page);
}

我的代码中出错了什么? 请帮助我。

1 个答案:

答案 0 :(得分:1)

我可以看到几个问题。第一行

myImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:bannerImageURL]]];

它可能有效但在该行上有太多嵌套调用。如果发生,您无法确定哪个(如果有)失败。将它分成3个单独的调用,以便您可以单步执行并确保其全部工作。

这一行:

imgScrollView.contentSize = CGSizeMake(self.view.frame.size.width * imageArray.count,

缺少Y值(可能是粘贴问题)但是 - 你不需要在你的for循环中执行此操作,你可以在完成添加所有图像后执行此操作。设置委托相同 - 您不需要每次都这样做。并设置滚动点。所有这些都应该发生在for循环之后。

最重要的是,您对scrollViewDidScroll方法的实现调用了setContentOffset。这绝对不行。您进行的调用具有滚动滚动视图的效果,因此将再次调用scrollViewDidScroll方法 - 您会看到问题。

我们提到的第一个问题很可能是你的图片没出现的原因 - 很可能你的网址在某处错了,所以你需要通过单独调用来调试它。