634 votes

Cocoa : Quelle est la différence entre le cadre et les limites ?

UIView et ses sous-classes ont toutes les propriétés frame y bounds . Quelle est la différence ?

1 votes

0 votes

Pour moi, l'explication la plus concise se trouve ici : videos.raywenderlich.com/cours/99-scroll-view-school/leçons/

1 votes

Il n'y a rien de concis dans une vidéo de 2:30. Je peux lire une phrase ou deux beaucoup plus rapidement que 2:30.

952voto

shek Points 6107

El limites d'un UIView es el rectangle exprimée sous la forme d'un emplacement (x, y) et d'une taille (largeur, hauteur) par rapport à son propre système de coordonnées (0, 0).

El cadre d'un UIView es el rectangle Il est exprimé sous la forme d'un emplacement (x, y) et d'une taille (largeur, hauteur) par rapport à la vue supérieure dans laquelle il est contenu.

Imaginons donc une vue d'une taille de 100x100 (largeur x hauteur) positionnée à 25,25 (x,y) de sa vue supérieure. Le code suivant imprime les limites et le cadre de cette vue :

// This method is in the view controller of the superview
- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);
    NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);
    NSLog(@"bounds.size.width: %f", label.bounds.size.width);
    NSLog(@"bounds.size.height: %f", label.bounds.size.height);

    NSLog(@"frame.origin.x: %f", label.frame.origin.x);
    NSLog(@"frame.origin.y: %f", label.frame.origin.y);
    NSLog(@"frame.size.width: %f", label.frame.size.width);
    NSLog(@"frame.size.height: %f", label.frame.size.height);
}

Et la sortie de ce code est :

bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100

frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100

Ainsi, nous pouvons voir que dans les deux cas, la largeur et la hauteur de la vue sont les mêmes, que l'on regarde les limites ou le cadre. Ce qui est différent, c'est le positionnement x,y de la vue. Dans le cas des limites, les coordonnées x et y sont à 0,0 car ces coordonnées sont relatives à la vue elle-même. Cependant, les coordonnées x et y du cadre sont relatives à la position de la vue dans la vue parente (dont nous avons dit précédemment qu'elle était à 25,25).

Il existe également un bonne présentation qui couvre les UIViews. Voir les diapositives 1 à 20 qui non seulement expliquent la différence entre les cadres et les limites mais montrent aussi des exemples visuels.

41 votes

Ainsi, les valeurs x et y des limites ne seront-elles pas toujours 0 et 0 puisqu'il s'agit de l'emplacement de l'objet dans... lui-même. Ou pourriez-vous donner un scénario où ce ne serait pas le cas ?

5 votes

Pour autant que je sache, l'origine des limites sera toujours 0,0.

78 votes

En fait, l'origine de bounds.origin peut être autre chose que 0,0. Utilisez setBoundsOrigin : pour déplacer/transférer l'origine. Voir "View Geometry" dans le "View Programming Guide for Cocoa" pour plus d'informations.

43voto

tristan Points 541

Essayez d'exécuter le code ci-dessous

- (void)viewDidLoad {
    [super viewDidLoad];
    UIWindow *w = [[UIApplication sharedApplication] keyWindow];
    UIView *v = [w.subviews objectAtIndex:0];

    NSLog(@"%@", NSStringFromCGRect(v.frame));
    NSLog(@"%@", NSStringFromCGRect(v.bounds));
}

la sortie de ce code est :

si l'orientation du dispositif est Portrait

{{0, 0}, {768, 1024}}
{{0, 0}, {768, 1024}}

si l'orientation de l'appareil est Paysage

{{0, 0}, {768, 1024}}
{{0, 0}, {1024, 768}}

évidemment, vous pouvez voir la différence entre le cadre et les bornes

2 votes

Ce n'est plus vrai (iOS 8)

1 votes

14voto

jorik Points 462

El cadre est le rectangle qui définit l'UIView avec par rapport à sa vue supérieure .

El rectangle de délimitation est la gamme de valeurs qui définissent que Le système de coordonnées de NSView.

c'est-à-dire que tout ce qui se trouve dans ce rectangle s'affichera réellement dans la UIView.

1voto

umairhhhs Points 31

0voto

Akshay Points 162

Veuillez passer par ce lien

  1. http://www.slideshare.net/profmido/05-views
  2. J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X