Почему мой UIView ведет себя вяло? - PullRequest
0 голосов
/ 10 января 2011

У меня есть контроллер UIView с фоновым изображением и UIWebView, настроенный на автоматическое изменение размера при изменении ориентации через свойство autoresizeResizingMask.Он работает плавно в симуляторе, но очень медленный при предварительном просмотре на устройстве.

Я мало использую веб-представления CALayer, чтобы создать рамку и тень, и когда я закомментирую эти части, все будет намного плавнее.Это просто для курса при игре с представлениями CALayer (в чем я сомневаюсь) или я неправильно реализую эти части?

Вот вид, загруженный методом

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {

    NSLog(@"Web project View Controller");
    [super viewDidLoad];

    UIImageView *bg = [[UIImageView alloc] initWithFrame:self.view.bounds];
    bg.contentMode = UIViewContentModeCenter;
    bg.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    bg.image = [UIImage imageNamed:@"fuzzyhalo.png"];
    [self.view addSubview:bg];


    projectView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    projectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    projectView.layer.backgroundColor = [UIColor blackColor].CGColor;

    projectView.layer.shadowColor = [UIColor blackColor].CGColor;
    projectView.layer.shadowOpacity = 1.0;
    projectView.layer.shadowRadius = 5.0;
    projectView.layer.shadowOffset = CGSizeMake(0, 0);  

    projectView.layer.borderColor = [UIColor blueColor].CGColor;
    projectView.layer.borderWidth = 2.0;


    CGRect newFrame = self.view.bounds;

    newFrame.origin.x = 40;
    newFrame.origin.y = 40;
    newFrame.size.width = newFrame.size.width - 80;
    newFrame.size.height = newFrame.size.height - 80;

    projectView.frame = newFrame;

    [self.view addSubview:projectView];
}

Фоновое изображениетоже довольно большой.1024x1024 72ppi PNG.

Любая помощь с благодарностью.Спасибо.

1 Ответ

5 голосов
/ 12 января 2011

Тени очень дорогие для рисования. В iOS 3.2 и более поздних версиях в CALayer имеется специальное свойство shadowPath. Это предварительно рассчитанный путь, который определяет контур тени. Это удерживает слой от необходимости генерировать путь на лету, используя составной альфа-канал слоя. Добавление этой строки должно сильно помочь:

projectView.layer.shadowPath = 
  [[UIBezierPath bezierPathWithRect:projectView.layer.bounds] CGPath];
...