2010-11-25 8 views
0

Je travaille sur une application iPhone de paysage. Il fonctionne bien sur l'iPhone mais quand je le lance sur un iPad ou sur le simulateur d'iPad, il a des problèmes avec des touches qui dépassent 320 dans la direction x.iPad Problème de paysage détectant les touches de la partie gauche de l'écran

Beaucoup de UIButtons au-delà de 320 mettront en surbrillance quand ils seront pressés mais ne feront pas leur action.

Quand j'Ajouter à mon superviews:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 

CGPoint touchLocation = [touch locationInView:self]; 
NSLog(@"bounds: %1.2f %1.2f touch: %1.2f %1.2f",self.bounds.size.width,self.bounds.size.height,touchLocation.x,touchLocation.y);  
} 

il ne sera jamais sortie une valeur supérieure à x 320. Toute partie de l'écran pressé qui est supérieure à 320 donne une sortie de 320 pour x.

Les UIViews sont tous réalisés par programme et sans UIViewControllers. J'ai mis le plist pour le lancer dans le paysage et dans le applicationDidFinishLaunching je tourne les vues avec ce:

window.transform = CGAffineTransformMakeRotation((M_PI/2.0)); 
window.bounds = CGRectMake(0, 0, 480, 320); 
window.center = CGPointMake(160.0f, 240.0f); 
[window makeKeyAndVisible]; 

Toute aide est appréciée.

+0

Êtes-vous construire cela comme un " Application universelle? " Lorsque vous l'avez construit pour iPad, avez-vous d'abord suivi les étapes pour créer une version iPad de vos fichiers .nib? –

+0

Non, je le construis comme une application iPhone seulement. – Jamvert

+0

'window.bounds = CGRectMake (0, 0, 480, 320);' définit les limites de l'application comme 480 et 320. Donc je suppose que vous ne pouvez pas toucher au-delà de cela. – visakh7

Répondre

1

J'ai eu un problème similaire mais j'ai créé tous les programmes Window, View et ViewController (parce que c'était un jeu utilisant OpenGL ES). Le problème était que j'ai créé à l'origine la fenêtre avec le même rect que la vue. Pour le résoudre il suffit de faire la fenêtre de cette façon:

// Always create the window in Portrait mode 
mpWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

et le viewController (qui crée la vue):

mpController = [[OViewController alloc] initWithFrame: CGRectMake(mPosX, mPosY, mWidth, mHeight)]; 
// After this line the view will rotate to landscape 
[mpWindow addSubview:mpController.view]; 

Hope this helps!

0

L'une de vos vues parents ou de la fenêtre n'a pas l'image correcte.

Étant donné que les touches sont évaluées de la fenêtre vers le haut à votre vue, elles s'arrêtent si le contact est en dehors de l'un de vos parents.

vous pouvez le déboguer avec le code comme:

UIView *parent = self ; 
while (parent = [parent superview]) NSLog("parent: %@",NSStringFromCGRect(parent.frame)); 

ce imprimera les cadres dans votre cadre ... vérifier si hierachy on a une largeur de 320 pixels