Jump to content
Death_Knight

[iOS - xCode] Melhor maneira para proceder a esta implementação

Recommended Posts

Death_Knight

Boa tarde,

Já á 3 meses que estou a estagiar e a desenvolver uma aplicação para iPad, entretanto já me deparei com alguns desafios (desde desenhos de gráficos programaticamente, criar infographs, etc) mas agora preciso de fazer uma implementação em que não sei qual a melhor maneira de proceder e gostava da opinião de alguém com mais "calo" nisto.

Então é assim, tenho uma página em que vou ter 14 separadores laterais (implementei-os girando os botões em Pi/2 dentro de uma scrollView) e ao clicar em cada um desses 14 separadores vou ter na view central informação diferente (nuns tabelas com dados, noutros campos de inserir dados para o coreData, etc.).

Em casos normais (com poucos separadores) crio Views sobrepostas e coloco-as a Hidden sendo que quando clico no botão correspondente elas ficam visíveis, no entanto neste caso especifico isto tornar-se-ia demasiado complexo e pesado, a minha ideia seria criar view controllers para cada botão e apenas os carregaria consoante necessário para a view central, isto dá para fazer? Ou há alguma maneira mais "programmer friendly" de fazer o que pretendo?

Tentei detalhar sem escrever demasiado, no entanto qualquer dúvida perguntem que eu tento esclarecer.

Cumprimentos e obrigado desde já :)

Share this post


Link to post
Share on other sites
KTachyon

Estou a tentar visualizar o que queres dizer com separadores laterais. É que, colocando botões na vertical dá muito pouco espaço para os 14 botões (menos de 35/70px se estiverem todos colados). Podias utilizar um menu lateral que aparece quando se clica num botão - quando o utilizador achar necessário - utilizando uma biblioteca como o JASidePanels.

De qualquer forma, a ideia é que tenhas uma view para os botões e uma view onde apresentas a view actual, cada uma com o seu controlador. A ideia não é teres as 14 visitas já carregadas. Podes ir carregando à medida que são necessárias e preparar para que sejam convenientemente descarregadas quando apanhas um aviso de memória, caso não seja a view que está a ser apresentada.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Death_Knight

Estou a tentar visualizar o que queres dizer com separadores laterais. É que, colocando botões na vertical dá muito pouco espaço para os 14 botões (menos de 35/70px se estiverem todos colados). Podias utilizar um menu lateral que aparece quando se clica num botão - quando o utilizador achar necessário - utilizando uma biblioteca como o JASidePanels.

De qualquer forma, a ideia é que tenhas uma view para os botões e uma view onde apresentas a view actual, cada uma com o seu controlador. A ideia não é teres as 14 visitas já carregadas. Podes ir carregando à medida que são necessárias e preparar para que sejam convenientemente descarregadas quando apanhas um aviso de memória, caso não seja a view que está a ser apresentada.

Os 14 botões têm exactamente 50x110 px e encontram-se dentro de uma scrollView com o contentSize a 50x14*110, essa parte tem mesmo que ser assim pois o público alvo já está habituado a este layout.

Vou colocar aqui um Mockup rápido daquilo que queria implementar para que me dêem a opinião da melhor forma de o fazer:

Untitled.jpg

Aí coloquei os botões no top mas isso apenas se trata de posicionamento e para o caso é irrelevante.

A solução mais "fácil" seria colocar 14 views escondidas e carregar a informação toda ao lançar esta página mostrando a view alvo quando carregasse no respectivo botão, mas claro que isto está longe de ser uma boa implementação (e é pesada) e se por acaso alguém agarrasse no meu código (saio daqui a uns meses da empresa) ia-me amaldiçoar por ter feito tamanha besteira :P

ora o meu objectivo seria que ao clicar num botão a Central View carregasse um View controller externo e o mostrasse já que o único contra que encontro nesta implementação será a quantidade de View controllers que serão necessários apenas para uma página, mas consigo viver com isso, pelo que estava a pensar em usar o seguinte código (apenas como exemplo claro):

[centralView.addSubView ViewControllerAlvo.view];

Mas pelo que vi no stack overflow esta é uma má prática e poderá trazer problemas.

Como me aconselham a proceder a esta implementação?

Edited by Death_Knight

Share this post


Link to post
Share on other sites
KTachyon

Esquece, não li a parte do iPad. Estava a imaginar que "laterais" significava que ficariam de lado e não no topo.

Aquilo que podes ter é uma estrutura (por exemplo, um NSArray) que tem os controladores das vistas. Quando carregas numa 'tab', removes a view do controlador da tab anterior e inseres a view que está na centralView para a view do controlador que corresponde a essa tab.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Death_Knight

Esquece, não li a parte do iPad. Estava a imaginar que "laterais" significava que ficariam de lado e não no topo.

Aquilo que podes ter é uma estrutura (por exemplo, um NSArray) que tem os controladores das vistas. Quando carregas numa 'tab', removes a view do controlador da tab anterior e inseres a view que está na centralView para a view do controlador que corresponde a essa tab.

Sim os controladores das vistas num Array eu já tinha (num NSMutableArray) o meu problema é mesmo não saber como colocar o viewController para a centralView.

Pelo que entendi devia ser [centralView addSubview:controlador.VistaAlvo];

No entanto isto não funciona.

Share this post


Link to post
Share on other sites
KTachyon

Tens os métodos

- addSubview:

- insertSubview:atIndex:

e tens o

– removeFromSuperview

para remover a view que lá está actualmente.

Típicamente os UIViewControllers já têm uma propriedade UIView chamada view:

[centralView addSubview:controlador.view];


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
besty

Sim os controladores das vistas num Array eu já tinha (num NSMutableArray) o meu problema é mesmo não saber como colocar o viewController para a centralView.

Pelo que entendi devia ser [centralView addSubview:controlador.VistaAlvo];

No entanto isto não funciona.

Penso que o que andas à procura é disto:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

Espero ter ajudado.

Share this post


Link to post
Share on other sites
Death_Knight

Obrigado a ambos, na altura nem cheguei a dizer como resolvi o problema mas foi da seguinte forma:

chieldView = [self.storyboard instantiateViewControllerWithIdentifier:@"nomeDoChield"];
chieldView.view.frame=CGRectMake(0, 0, viewParaOndeVaiOChield.frame.size.width, viewParaOndeVaiOChield.frame.size.height);
[self addChildViewController:chieldView];

Com as chieldViews num NSArray de ViewController's

Já agora aproveito para perguntar, qual a melhor maneira de colocar um video a correr numa View? Já andei a pesquisar um bocado e encontrei o MPMoviePlayerController mas ainda não o consegui colocar a funcionar, na documentação da apple complicam muito o uso do MPMoviePlayerController e eu apenas necessitava de algo extremamente simples, apenas uma vista pequena com um video a correr, qual a melhor solução a seguir?

Edit: Resolvido em coisa de 30 minutos portanto era algo simples...

Se alguém necessitar de código para videoPlayback, eu posso fornecer a minha solução :D

Edited by Rui Carlos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.