2011-04-19 7 views
3

Je veux montrer une image (plus grande que l'écran de l'iphone), que l'utilisateur peut faire défiler. est-ce pas difficoult, je l'ai fait avec ce code: dans mon fichier .hUIButton sur UIImageView (sur UIScrollView)

@interface mappa1 : UIViewController <UIScrollViewDelegate> { 
IBOutlet UIImageView *img; 
IBOutlet UIScrollView *scroller; 
} 

dans mon fichier .m

UIImage *image = [UIImage imageNamed:@"prova.jpg"]; 
img = [[UIImageView alloc] initWithImage:image]; 
scroller.delegate = self; 
scroller.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
scroller.contentSize = img.frame.size; 
scroller.scrollEnabled = YES; 
scroller.directionalLockEnabled = NO; 
scroller.userInteractionEnabled = YES; 
CGSize ivsize = img.frame.size; 
CGSize ssize = scroller.frame.size; 

float scalex = ssize.width/ivsize.width; 
float scaley = ssize.height/ivsize.height; 
scroller.maximumZoomScale = 1.0; 
scroller.minimumZoomScale = fmin(1.0, fmax(scalex, scaley)); 
scroller.zoomScale = fmin(1.0, fmax(scalex, scaley)); 
[scroller addSubview:img]; 

et

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

return img; 

}

et tout fonctionne bien!

Maintenant, je veux ajouter un UIButton sur l'UIImage, pas sur l'UIView, parce que je veux que si l'utilisateur zoome ou déplace l'image, l'uibutton suit le mouvement/zoom de l'image ui.

J'ajoute donc ce code:

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
btn.frame = CGRectMake(0, 0, 100, 25); 
[btn setTitle:@"Play" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
[img addSubview:btn]; 

mais le UIButton est "non-cliquables"! Bien sûr, UIView et UIImageView ont la valeur UserInteractionEnabled sur YES!

Merci!

EDIT: si j'écris

[scroller addSubView:btn]; 

cela fonctionne, mais, bien sûr, si le zoom utilisateur/arrière, le UIButton est toujours grand 100x25.

+0

Il y a une propriété de scrollViews "contenu résiliables Touches". Vous pouvez le trouver dans l'inspecteur d'attributs dans IB. Décochez cette option et essayez. –

+0

merci mais non, ça ne marche pas! De plus, si je désélectionne "cancell contenu content", le zoom ne fonctionne pas! – JAA

+0

Vous devrez peut-être implémenter le redimensionnement manuellement pour le bouton en fonction du niveau de zoom sur l'UIImage. Donc, chaque fois que quelqu'un zoome sur l'image, vous ajustez la taille du bouton. – Cyprian

Répondre

2

RESOLU! Je ne sais pas pourquoi, mais si j'ai vérifié UserInteractionEnabled (sur UIImageView) dans Interface Builder, cela ne fonctionne pas. Si j'écris

img.UserInteractionEnabled = YES; 

cela fonctionne!

0

i essayé et ça marche pour moi .......

UIImageView * imageView = [[UIImageView alloc]init]; 
[imageView setImage:[UIImage imageNamed:@"image.jpeg"]]; 
[imageView setFrame:CGRectMake(10,10,300,300)]; 
[imageView setContentMode:UIViewContentModeScaleToFill]; 
[imageView setUserInteractionEnabled:TRUE]; 

UIButton * ButtonOnImageView = [[UIButton alloc]init]; 
[ButtonOnImageView setFrame:CGRectMake(135,120,60,30)]; 
[ButtonOnImageView setImage:[UIImage imageNamed:@"image.jpeg"] forState:UIControlStateHighlighted]; 
[ButtonOnImageView setImage:[UIImage imageNamed:@"image2.jpeg"] forState:UIControlStateNormal]; 
[ ButtonOnImageView addTarget:self action:@selector(OnClickOfTheButton) forControlEvents:UIControlEventTouchUpInside]; 

[imageView addSubview:ButtonOnImageView]; 
[self.view addSubview:imageView];