2015-07-30 2 views
-2

Извинения за непонятный вопрос. здесь фиксированный ответ:Погрузка с задержкой просмотра

В моем контроллере исходного вида у меня есть две круглые кнопки. Раньше это был вид UIImage + распознаватель жестов (по причинам oux), когда я был прототипированием, он хорошо работал на iPhone 4 и выше. Теперь я заменить UIImage + жест с правильным круглым UIbuttons что я создаю программно, как следовать внутри метода, который я называю в viewDidLoad:

self.featureButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[_featureButton setBackgroundImage:[UIImage imageNamed:@"FeaturedArtistImage.jpg"] forState:UIControlStateNormal]; 
_featureButton.layer.cornerRadius = size/2; 
_featureButton.frame =CGRectMake(self.view.frame.size.width/2-size/2, 50, size, size); 
_featureButton.clipsToBounds = YES; 
_featureButton.layer.borderColor=[UIColor whiteColor].CGColor; 
_featureButton.layer.borderWidth=5.0f; 

[_featureButton addTarget:self action:@selector(tap) forControlEvents:UIControlEventTouchUpInside]; 
[self.view insertSubview:self.featureButton belowSubview:self.artistLabel]; 

Как матовый рекомендуется использовать основную нить, чтобы создать эти кнопки я добавил следующее:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ { 
//Create buttons here 
}]; 

Я определенно более высокую производительность, но после вызова VC несколько раз приложение FPS падает, элемент пользовательского интерфейса исчезают и снова появляются один за другим через несколько секунд (у меня есть 3 UILabels и 4 UIButtons) и, наконец, он падает на iPhone 4S, что, я думаю, удивительно.

Я думаю, что это может произойти из другого VC, который вызывается перед тем, как перейти к главному после запуска. На этом я также создаю UIButtons, но используя подкласс.

#import "RoundButtonClass.h" 

@implementation RoundButtonClass 
{ CGFloat centerViewX; 
    CGFloat centerViewY; 
    CGFloat startAngle; 
    CGFloat endAngle; 
} 

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 


     self.backgroundColor = [UIColor colorWithWhite:1 alpha:0.7]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(actionFinished) name:@"shared" object:nil]; 



    } 
    return self; 
} 



-(void)drawRect:(CGRect)rect{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // do work here 
     UIImage *maskedImage = [self maskImage:self.mainBkg withMask:self.maskImage]; 
     [self setBackgroundImage:maskedImage forState:UIControlStateNormal]; 


     if (self.isFree == YES) { 
      self.frame = self.freeFrame; 
     } 
     else{ 


      centerViewX = (self.frame.size.width/4)*2 - self.size/2.0; 
      centerViewY = self.frame.size.height/4 - self.size/2.0 + self.offset; 

     self.clipsToBounds = YES; 
     self.layer.cornerRadius = self.size/2.0f; 
     self.layer.borderColor=[UIColor whiteColor].CGColor; 
     self.layer.borderWidth=3.0f; 
     self.titleLabel.font=[UIFont fontWithName:@"MyriadPro-Cond" size:70]; 
     self.titleLabel.textColor = [UIColor whiteColor]; 
     self.titleLabel.textAlignment = NSTextAlignmentCenter; 

     [self addTarget:self action:@selector(touch) forControlEvents:UIControlEventTouchUpInside]; 


          }]; 

         }]; 

Благодарим за помощь.

ответ

0

Возможно, вы создаете кнопки и добавляете их в интерфейс в фоновом потоке. Это незаконно и вызовет задержку, которую вы описываете.

+0

Именно так, я использую '[[NSOperationQueue mainQueue] addOperationWithBlock:^{}]' для создания любого элемента пользовательского интерфейса программно, больше нет отставания. Спасибо, матовый. – Zeretyh

Смежные вопросы