Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

iRCC

UITapGestureRecognizer em UIImageView

Recommended Posts

Boa tarde, estou montando um app que vai listar algumas imagens, em forma de tabela. +- como no instagram na parte qe você ve todas as fotos de uma pessoa.

No app eu criei uma UIScrollView para conter todas as imagens.

 

ficando assim:

int posX = 0;
    int posY = 0;
    int alturaTotal = 0;
    int idImage = 0;
    
    float largura = self.listaScrollView.frame.size.width;
    float altura = 160 * (elementos / 2);//a altura é referente ao tamanho das imagens multiplicado pela quantidade de imagens div por 2 para gerar várias linhas com 2 imagens em cada linha
   
    self.listaScrollView.contentSize = CGSizeMake(largura , altura);
    self.listaScrollView.userInteractionEnabled = YES;

    
    //inicia o for para montar as "linhas"
    for(int i = 0;i < (elementos / 2);i++) {
        
        //para cada linha existem duas imagens
        for(int x = 0; x < 2; x++){
        
            
            UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.jpeg"]];
            
            
            img.userInteractionEnabled = YES;
            
            //cria tag para reconhecer objeto
            [img setTag:idImage];
            
            
            
            UITapGestureRecognizer *tapRecognizer;
            tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewSelecionada:)];
           // tapRecognizer.numberOfTapsRequired = 1;
            
            tapRecognizer.delegate = self;
            [img addGestureRecognizer:tapRecognizer];
            
            
            //posiciona a imagem
            img.frame = CGRectMake(posX, posY, 160, 160);
            
            if(x % 2 == 0){
                posY = alturaTotal;
                posX = img.frame.size.width;
                
                //incrementa a linha para ficar abaixo da outra exatamente
                alturaTotal += img.frame.size.height;
                
            }else{
                posY = alturaTotal;;
                posX = 0;
                
            }
        
            
            [self.listaScrollView addSubview:img];
            
            idImage++;
        }
    
    }
    

 

A função que reconhece o tap é a seguinte:

 

- (void)imageViewSelecionada:(UIGestureRecognizer *)aGesture {
    UITapGestureRecognizer *tapGesture = (UITapGestureRecognizer *)aGesture;
    
    UIImageView *tappedImageView = (UIImageView *)[tapGesture view];
    
   
        NSLog(@"%d", tappedImageView.tag);
   
}

 

 

Como recentemente iniciei no desenvolvimento de apps não estou conseguindo identificar o pq de não estar funcionando. No momento fica tudo fixo mesmo, mais para frente estas imagens vão vir de um webservice.

 

o arquivo .xib já está indicado com o protocolo <UIGestureRecognizerDelegate>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara, uma dicas:
1o, não use números mágicos: números como "160" e "2" apareceram várias no código... substitua por variáveis isso, deixando o código mais legível e facilitando a manutenção.
2o, separe o seu código em métodos menores. Por exemplo, crie um método para inicializar as imagens e outro para posicionar as imagens.
Eu faria algo assim:

 

-(NSArray*)listaImagens{
NSMutableArray* array=[NSMutableArray array];
for (int i=0;i<quantidadeElementosQuerVoceQuerAdicionar;i++){


UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.jpeg"]];
img.userInteractionEnabled = YES;


//cria tag para reconhecer objeto
[img setTag:i];//ou aqui ou no loop principal


UITapGestureRecognizer *tapRecognizer;
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewSelecionada:)];
// tapRecognizer.numberOfTapsRequired = 1;


tapRecognizer.delegate = self;
[img addGestureRecognizer:tapRecognizer];


[array addObject:img];
}
return array;
}

 

main:

 

NSMutableArray* arrayImagens=[self listaImagens];
int elementos=[arrayImagens count];


int altura=160;
int largura=160;
int elementosLinha=2;


float larguraTotal = largura * elementosLinha;
float alturaTotal = altura * (elementos/elementosLinha);


self.listaScrollView.contentSize = CGSizeMake(larguraTotal , alturaTotal);
self.listaScrollView.userInteractionEnabled = YES;


//inicia o for para montar as "linhas"
for(int i = 0;i < (elementos );i++) {
UIImageView *img=arrayImagens[i];


//posiciona a imagem
img.frame = CGRectMake(largura*(i%elementosLinha), altura*i, largura, altura);
[img setFrame:frame];//é preciso redefenir o frame da img... frame não é objeto logo não atualiza quando voce muda ele.


[self.listaScrollView addSubview:img];
}

 

Pronto... melhor não? Bem reusável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.