Большой UIScrollView с фоновым рисунком не работает - PullRequest
1 голос
/ 05 марта 2011

У меня есть UIScrollView с очень большим представлением содержимого, это книжная полка, содержащая около 1000 элементов, когда содержимое представлений прокрутки достигает более чем 16000 пикселей в высоту, оно показывает черный фон, и вся графика перекрывается / смешивается.

Вот пример кода

- (void)viewDidLoad {
    [super viewDidLoad];

    // Doesn't work
    int sizeForContent = 20000;

    // Does Work
    //sizeForContent = 10000;


    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  

    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, sizeForContent)];
    subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]];
    [scroll addSubview:subView];
    [subView release];

    scroll.contentSize = CGSizeMake(self.view.frame.size.width, sizeForContent);
    [self.view addSubview:scroll]; 

    [scroll release];

}

Кто-нибудь знает, почему это происходит?Я предполагаю, что это как-то связано с ограничением памяти, но, похоже, он не использует много памяти.

Я знаю, что мог бы установить цвет фона прокрутки напрямую вместо добавления подпредставления и установки фона этого, ноМне нужно оставить фон прокрутки в виде цвета.

Вы можете получить базовый проект xcode от http://cl.ly/2i3F3q0G1j3q433n0f1E, если хотите увидеть проблему.

Любая помощь или объяснения в значительной степениоценили.

Ответы [ 3 ]

0 голосов
/ 30 мая 2011

У меня тоже такая же проблема.У меня длинное изображение, я просто хочу применить эффект панаромы к нему во время прокрутки.Если бы я использовал CATiledLayer, это даст эту гладкость.Я не думаю, что так придаст плавность.Потому что он будет рисовать каждый раз при прокрутке. Я просто хочу сделать как стандартные иконки приложений iPhone, прокручивая Home.

0 голосов
/ 10 апреля 2012

Я решил это, создав вид с фоновым рисунком и добавив вид прокрутки в качестве подпредставления с [UIColor clearColor] фоном.

0 голосов
/ 05 марта 2011

ммм, я также предполагаю, что это проблема с памятью ...

попытаться избежать этого:

 subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]];

я полагаю, что когда вы делаете это, xCode загружает небольшой jpg, нозатем нарисуйте его для всей области вашего UIView, которая в и будет иметь большое «изображение», чтобы сохранить в памяти ...

попробуйте вместо этого использовать только цвет заливки и посмотрите, что-то изменится ...

, если это возможно, возможно использовать CATiledLayer для вашего вида, так что только видимая часть вашего большого UIView будет в памяти (с неудобствами, которые пользователи будут видеть, когда он будет рисовать каждый раз, когда они прокручивают ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...