Как добавить UIImageVIew в UIScrollView программно в iOS?

В моем приложении я хочу отображать изображения в UIScrollview, Здесь я не получаю высоту и ширину вида прокрутки как высоту и ширину изображения. Как получить вид прокрутки (высота, ширина) для вида моего изображения (высота и ширина)? Вот до сих пор я пытался.

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 ответ

Есть несколько проблем, которые я вижу. Первая строка

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. Это точно не сработает. Вызов, который вы делаете, имеет эффект прокрутки scrollview, который поэтому вызовет метод scrollViewDidScroll снова - вы видите проблему.

Скорее всего, причина, по которой ваши изображения не появляются, - это первая проблема, о которой я упоминаю - скорее всего, ваши URL-адреса где-то неверны, поэтому вам нужно отладить их, выполняя отдельные вызовы.

Другие вопросы по тегам