Извинения за непонятный вопрос. здесь фиксированный ответ:Погрузка с задержкой просмотра
В моем контроллере исходного вида у меня есть две круглые кнопки. Раньше это был вид 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];
}];
}];
Благодарим за помощь.
Именно так, я использую '[[NSOperationQueue mainQueue] addOperationWithBlock:^{}]' для создания любого элемента пользовательского интерфейса программно, больше нет отставания. Спасибо, матовый. – Zeretyh