Вставка UIImageView в качестве лага подпредставления - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть UIImageView, который содержит довольно большое изображение (3 +/- МБ), и я вставляю его для использования в качестве фонового изображения в качестве подпредставления, например:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view insertSubview:imageView atIndex:0];
}

Проблема в том, чтокогда представление перемещается контроллером навигации, переход не является плавным;это очень изменчиво, потому что (я предполагаю) изображение большое, и загрузка его в просмотр изображений обходится дорого.Раньше я использовал

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"foobar"]];

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

Есть лилучший / более эффективный способ сделать это?

Ответы [ 3 ]

1 голос
/ 24 декабря 2011

Я бы попробовал следующее: сначала измените размер изображения, чтобы оно соответствовало размеру интерфейса.Для этого перерисуйте изображение в контекст изображения (UIGraphicsBeginImageContextWithOptions), используя метод drawInRect:.Много информации об этом в моей книге: http://www.apeth.com/iOSBook/ch15.html

Например, чтобы уменьшить изображение до половины его размера:

UIImage* lin = [UIImage imageNamed: @"lin.png"];
CGSize s = lin.size;
CGFloat scale = 0.5;
s.width *= scale; s.height *= scale;
UIGraphicsBeginImageContextWithOptions(s, YES, 0);
[lin drawInRect:(CGRect){{0,0}, s}];
lin = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Кроме того, источник неэффективности может лежать в другом месте.,Используйте новое меню отладки в симуляторе, чтобы искать другие вещи, которые неэффективно рисуются в вашем интерфейсе.Есть хорошее видео WWDC 2011 об эффективном рисовании.Анимации - это именно то, где проявляется эта неэффективность, поэтому я думаю, что вы на правильном пути.

0 голосов
/ 02 января 2012

В итоге для меня сработало создание UIImageView в MainWindow.xib и установка его на изображение, чтобы его не нужно было загружать и выгружать каждый раз, когда представление меняется, и дает поток выполненияПриложим некоторую преемственность.Спасибо за вашу помощь!

0 голосов
/ 25 декабря 2011

Чтобы решить эту проблему, «поскольку изображение настолько велико, что код увеличивает изображение, и оно показывает только очень маленькую его часть и очень близко.», Вы можете установить кадр вашего UIImageView с помощью метода setFrameкак это:

[yourImageView setFrame:CGRectMake(0,0,xWidth, yHeight)];

Если yourImageView находится поверх представления viewcontroller, вы можете сделать это:

[yourViewController.yourImageView setFrame:CGRectMake(0,0,yourViewController.view.frame.size.width, yourViewController.view.frame.size.height)];
...