2010-04-27 8 views
1

Voici mon code:UIView ne précise pas bon

frame = _pageContentView.frame; 
    NSLog(@"%f; %f; %f; %f;", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); 
    frame.size.height = pageContentView.frame.size.height; 
    NSLog(@"%f; %f; %f; %f;", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); 
    _pageContentView.frame = frame; 
    NSLog(@"%f; %f; %f; %f;", _pageContentView.frame.origin.x, _pageContentView.frame.origin.y, _pageContentView.frame.size.width, _pageContentView.frame.size.height); 

Et le NSLog envoie ces valeurs:
0,000000; 0,000000; 317.648956; 0,000000;
0,000000; 0,000000; 317.648956; 768,000000;
0,000007; 0,000004; 317.648956; 768,000000;

Pouvez-vous voir? Dans la dernière rangée, les coordonnées x et y sont un peu folles ... D'où viennent ces chiffres? Quel est le problème ici?

Répondre

3

Certaines opérations mathématiques sont effectuées sur vos zéros; les transformer, efficacement, en 0.change. Notez, cependant, que l'irrégularité représente une dérive de 0,0007%. C'est vraiment rien à craindre. Vous pouvez ignorer n'importe quoi après le premier chiffre après la période, ou deux chiffres si vous déplacez les vues autour de beaucoup.

+0

Mais, quel calcul est fait? –

+0

Qui sait? On s'en fout? Il pourrait être aussi simple que des trucs qui passent d'un double à un autre; ou crud à gauche des itérations précédentes dans la FPU. L'écart est tout à fait hors de propos et devrait simplement être ignoré. (0,000007 représente 0,0007%, ou un 7 cent millièmes de pixel, c'est-à-dire quelque chose comme 35 nanomètres). –

+0

Les ordinateurs ne peuvent pas faire de vrais calculs. Tous les nombres à virgule flottante ont construit la variabilité en raison des compromis que les ordinateurs doivent faire dans le traitement des mathématiques en particulier dans le cas de nombres irrationnels. Il y a un papier célèbre sur le sujet. http://docs.sun.com/source/806-3568/ncg_goldberg.html – TechZen

Questions connexes