2017-01-24 4 views
-1

У меня есть xib в моем объективном приложении c. Но когда я пытаюсь загрузить этот viewController, это потратит около 1 секунды, и это плохое чувство ...Как загрузить быстрый просмотр xib в мой viewController?

Я использую собственный шрифт, но я добавил его правильно в мой .plist My Класс customView добавляется владельцем файла и подключается к розеткам.

Мой код:

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

    if (self) 
    { 
     [email protected]"MyCustomView"; 

     [self addSubview: 
     [[[NSBundle mainBundle] loadNibNamed:nibname 
             owner:self 
            options:nil] objectAtIndex:0]]; 


    } 
    return self; 
} 

А потом, я загружаю это в моем ViewController так:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    ... 
    MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
    [self.view addSubview:myview]; 
    ... 
} 

ли я загрузке настраиваемое представление правильно?

Как ускорить загрузку?

Edit 1 исправлен затем прочитать матовую комментарий:

[self.view addSubview:myview]; 

на поставку: последний неправильный код: [self.view MyView];

+0

Это не ваш настоящий код. Строка '[self.view myview];' не имеет никакого смысла. – matt

+0

¿? на самом деле я добавляю это в uiscrollView, но для более простого этого примера я добавляю это в представление. Что происходит? Это тоже работа ... – user3745888

+0

Вы ничего не добавили. Если вы хотели сказать 'addSubview:' вы должны _say_ это. Поставьте _real_ код, а не только некоторые вещи, которые вы набираете от руки. _Copy и paste_ из реального тестового проекта. – matt

ответ

2

Я не могу воспроизвести проблему, основанную на том, что вы сказали. Я добавил тайминги к вашему viewDidAppear код:

NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 
MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
[self.view addSubview:myview]; 
NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 

И вот результат:

2017-01-24 12:47:18.812 NibLoadTest[12087:135969] 506983638.811982 
2017-01-24 12:47:18.814 NibLoadTest[12087:135969] 506983638.814367 

Это не задержка на 1 секунду! Это пара тысячных секунды.

Таким образом, проблема иллюзорна или вызвана тем, что вы еще не показали. Если вы пытаетесь измерить, как долго что-то принимает, measure it. В идеале используйте Инструменты; что для этого. Он расскажет, что занимает время и почему. Не догадывайтесь.

+1

Также представляется рискованным поместить этот код в 'viewDidAppear', поскольку это может быть вызвано много раз за время жизни этого контроллера представлений, тем самым вызывая повторное добавление одного и того же представления. – matt

+0

Большое спасибо! @matt это правильный ответ. Я меняю свой код на функцию viewDidLoad, и эта работа выполняется безотлагательно. Проблема заключалась в том, что вы комментируете, вызывается много раз в viewDidAppear. Счастливое кодирование! Благодаря! – user3745888

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