Pergunta

Eu tenho um aplicativo de entrada de dados que tem o usuário digite cerca de 6 peças de todas as informações em diferentes pontos de vista em um controlador de navegação. Esta multa funciona, mas uma vez que o usuário se acostuma com a aplicação do tempo que leva para a próxima tela a aparecer retarda o baixo usuário.

Eu tentei a aplicação sem as animações, mas não se sente muito bem. Existe uma maneira de obter as animações ocorrer mais rápido? Eu estou usando principalmente um controlador de navegação, exibições de tabela, e vistas Picker.

Foi útil?

Solução

Não vai ser uma pena cada vez que você carregar um novo ponto de vista, você poderia tentar consolidar telas usando uma visão de rolagem ou um layout diferente. Além disso, se você estiver carregando quaisquer gráficos desnecessários você pode querer removê-los.

Você também pode adicionar cada vista como um subview-se no caso em que você tem controle sobre a duração de animação, entre outras coisas. Este código irá fazer isso por você, embora tenha cuidado como eu apenas escreveu e não testá-lo (O estilo de transição e os parâmetros boolean pode ser removido como eles não fazem nada agora).

UIViewControllerExtendedPresentModalViewController.h

#import <Foundation/Foundation.h>

typedef enum _ExtendedModalTransitionStyle
{
    ExtendedModalTransitionStyleTopDown 
} ExtendedModalTransitionStyle;

@interface UIViewController ( ExtendedPresentModalViewController )
- (void)presentModalViewController: (UIViewController*)modalViewController 
               withTransitionStyle: (ExtendedModalTransitionStyle)style
                          animated: (BOOL)animated;

- (void)dismissModalViewController: (UIViewController*)modalViewController
               withTransitionStyle: (ExtendedModalTransitionStyle)style
                          animated: (BOOL)animated;
@end

UIViewControllerExtendedPresentModalViewController.m

#import "UIViewControllerExtendedPresentModalViewController.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIViewController ( ExtendedPresentModalViewController )

    - (void)presentModalViewController: (UIViewController*)modalViewController 
                   withTransitionStyle: (ExtendedModalTransitionStyle)style
                              animated: (BOOL)animated
    {
        [modalViewController retain]; // we'll need this for a little while, hang on to it.

        CATransition* transition = [CATransition animation];
        [transition setDuration: 0.4];
        [transition setTimingFunction: 
         [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];
        [transition setType: kCATransitionMoveIn];
        [transition setSubtype: kCATransitionFromBottom];
        [[[self view] layer] addAnimation: transition 
                                   forKey: nil];
        [[self view] addSubview: [modalViewController view]];
    }

    - (void)dismissModalViewController: (UIViewController*)modalViewController
                   withTransitionStyle: (ExtendedModalTransitionStyle)style
                              animated: (BOOL)animated
    {
        CATransition* transition = [CATransition animation];
        [transition setDuration: 0.4];
        [transition setTimingFunction: 
         [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];//kCAMediaTimingFunctionEaseInEaseOut]];
        [transition setType: kCATransitionReveal];
        [transition setSubtype: kCATransitionFromTop];
        [[[[modalViewController view] superview] layer] addAnimation: transition 
                                                              forKey: nil];
        [[modalViewController view] removeFromSuperview];

        [modalViewController release]; // all done, we can let this go.
    }
    @end

Outras dicas

Você está reutilizando células na exibição de tabela? Certifique-se de que realmente reutilizá-los, em outras palavras, fazer toda a configuração da célula dentro do caso, se (célula == nil) e aplicam-se apenas os dados no caso comum (aplicando-se tanto a reutilização ea recém-criada).

Esteja ciente do impacto na performance que a transparência pode ter em um celular. Muitas vezes parece que você tem que fazer as coisas transparentes, mas talvez não porque UITableViewCell está ciente dos problemas. Desligar a transparência em alguns objetos pode parecer errado, mas é uma tentativa vale a pena para ver se ele realmente funciona. A maior parte do custo de rolagem uma célula é a composição como os movimentos celulares, e não a criação da célula inicialmente.

Outra coisa que pode ajudar é fazendo a composição da opinião de que você aplica a sua célula de antecedência em vez de adicionar todos os pontos de vista para a célula, então você aplicar apenas uma vista premade para o seu celular.

Se você está realmente animar vistas nas células de rolagem pode ser necessário repensar isso ou pelo menos usar alguma simplificação para torná-lo um pouco menos desgastante para o dispositivo.

Você também pode considerar a adoção de estratégia Matt Gallagher para manipulação de células -. ele pára o seu cellForRowAtIndexPath transformando em um longa, conjunto desagradável de ifs

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top