2010-04-12 4 views
1

Je sous-classe UIScrollView et au début, je remplis ShowsScrollView avec certains éléments. Après l'avoir rempli, j'installe frame et contentSize dans ce showScrollView. Mais après avoir pivoté en mode paysage, je change les coordonnées x et y du cadre ShowsScrollView, pour le déplacer du coin inférieur au coin supérieur droit. Ensuite, je le redimensionne (change la largeur et la hauteur de l'image ShowsScrollView) et réorganise les éléments de ce parchemin. À la fin, j'ai configuré new contentSize. Maintenant, je reçois l'événement touche seulement sur le premier quart de défilement, le défilement ne fonctionne que sur 1/4 de défilement, mais défile tous les éléments dans scrollview. Après toutes les actions, j'écris un journal: NSLog (@ "ViewController: setLandscape terminé: taille:% f,% f contenu:% f,% f", scrollView.frame.size.width, scrollView.frame.size.height, scrollView.contentSize.width, scrollView.contentSize.height);iPhone SDK UIScrollView n'obtient pas d'événements tactiles après l'avoir déplacé

valeurs sont correctes: ViewController: setLandscape fini: Taille: 390,000000, 723,000000 contenu: 390.000000,950.000000

Lors de la rotation retour au portrait, je propose et redimensionnez tout chose en arrière et tout fonctionne bien ..

S'il vous plaît aider!

Répondre

0

J'ai eu le même problème et réussi à le faire fonctionner en définissant à nouveau la taille de self.view APRÈS avoir changé le cadre de la vue. Je ne sais pas pourquoi cela fonctionne, mais c'est le cas.

// Set the view's frame 
if (UIDeviceOrientationIsLandscape(toOrientation)) { 
[self.view setSize:CGSizeMake(1024, 724)]; 
} else { 
[self.view setSize:CGSizeMake(768, 960)]; 
} 

// Set scrollview frame 
if (UIInterfaceOrientationIsLandscape(toOrientation)) { 
self.scrollView.frame = CGRectMake(0, 0, 100, 300); 
self.scrollView.contentSize = CGSizeMake(100, 600); 
} 
else { 
self.scrollView.frame = CGRectMake(0, 0, 300, 100); 
self.scrollView.contentSize = CGSizeMake(600, 100); 
} 

// Move your content around here 

// Set the view's frame again 
if (UIDeviceOrientationIsLandscape(toOrientation)) { 
[self.view setSize:CGSizeMake(1024, 724)]; 
} else { 
[self.view setSize:CGSizeMake(768, 960)]; 
} 
+0

hmm, comment avez-vous des propriétés de redimensionnement automatique de configuration? Maintenant j'ai une autoresizing par défaut (en haut et à gauche), et dans la méthode didRotateFromInterfaceOrientation j'ai: [self.view setSize: CGSizeMake (768,1004)]; scrollView.frame = CGRectMake (0, 584, 768, 420); // Calculer et configurer la taille du contenu pour scrollView // Déplacer le contenu dans scrollView [self.view setSize: CGSizeMake (768,1004)]; 1004 px la hauteur est parce que j'ai tabbar sur le fond, qui a 20 px hauteur Même résultat! J'essaie aussi de désactiver l'autoresizing et de remplacer setSize avec setFrame avec les coordonnées 0,0, mais j'ai une grande marge en haut .. – miham

+1

Je ne règle pas l'autoresizing donc je suppose que c'est la valeur par défaut. Je ne peux pas penser à autre chose que je mets qui pourrait faire une différence, j'espère que vous le faites fonctionner! – Squirtle

0

Vous devez apporter scrollView à l'avant du superView, par exemple:

[self.view bringSubviewToFron:scrollView]; 
Questions connexes