Pergunta

Estou fazendo minha primeira incursão na programação do Cocoa Touch (e uma das primeiras no Cocoa em geral) e escrevendo um jogo simples para o iPhone, embora esta pergunta seja sobre o Cocoa Touch em geral.

A IU principal consiste em uma faixa de botões de ação idênticos (variando apenas em cores) dispostos horizontalmente na tela.Embora atuem como botões, eles precisam ter uma aparência personalizada.Cada um responde aos eventos de toque da mesma maneira, acionando outros eventos no aplicativo.

Quero definir uma visualização personalizada, em parte para ter mais controle sobre o comportamento do que apenas ter um monte de botões padrão e em parte para aprender mais sobre a programação do cacau.

  • Devo definir uma visualização principal com uma série de subvisualizações, cada uma delas desenhando e encaminhando eventos de toque? Cada botão deve fazer coisas padrão, como mostrar um estado pressionado quando tocado e assim por diante.Existem visualizações de contêiner pré-existentes para esse tipo de cenário?

  • Ou devo apenas definir uma visualização principal que desenha toda a faixa e detecta onde ocorre um toque? Eu sinto que esta é uma abordagem mal projetada - eu não deveria estar programando código de teste de sucesso.


Editado para esclarecer a questão

Foi útil?

Solução

A abordagem mais leve é ​​adicionar subcamadas à camada do UIView.Use hitTest:para despachar os toques recebidos em seu UIView para a instância CALayer que precisa recebê-los.

Se você precisar de mais comportamento do UIResponder (touchesBegan etc.), você pode querer usar subvisualizações em vez de subcamadas, pois isso permitiria lidar com os eventos diretamente nos objetos, em vez de ter que despachá-los de um respondedor central (seu principal UIView).

Conseqüentemente, a parte essencial pode ser quanto do comportamento associado aos seus botões individuais deve ser conhecido (tratado) pelo seu UIView principal.Se fizer sentido ter tudo controlado a partir de um local central, você pode colocar toda a lógica no UIView e usar apenas subcamadas para fins de exibição leve.Se fizer mais sentido colocar o comportamento nos próprios botões, eles devem ser UIResponders e, como tal, subclasse UIView e ser adicionados como subvisualizações de sua visualização principal.

Outras dicas

Você deve usar uma matriz de subviews - dessa maneira que cada classe "Button" sabe como desenhar e sua supervisão (sua "visão principal" declarada) coloca os botões para onde eles precisam ir.

E segundo na NDA: Basta falar sobre o iPhone.

Se você tem muitos botões e quer fazer coisas sofisticadas com eles, eu recomendo usar camadas. Seu UIView lidará com a interpretação de qual camada teve o toque (testes de acertar) e responderá adequadamente. Se tudo o que você está fazendo é gerenciar um todo o conjunto de botões com vários efeitos e animações, essa pode ser uma rota mais fácil.

Quanto à má engenharia, de jeito nenhum. Se você dar uma olhada nos guias associados, verá a animação e as camadas principais exigirão testes de acerto (embora isso seja relativamente fácil), mas é muito mais limpo que o UIView fazendo todo o desenho e mais eficiente do que muitas subviações. Ele desliza bem entre essas duas abordagens.

Divulgação completa: estou apenas envolvendo a cabeça como aproveitar essas coisas melhor, mas para controles interativos mais complicados.

Você pode fazer o layout de sua visão no interface Builder. Basta arrastar um monte de UIButtonestá na visão do seu controlador de visualização.

Para responder aos eventos, você define um IBAction no seu controlador de visualização e conecte os botões a ele.

Tudo isso é muito básico. Eu realmente sugiro que você pelo menos passe pela introdução da programação do iPhone que a Apple possui online. Ele ensinará a você o básico do iPhone e interface Builder.

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