Question

Je suis un débutant de Cocoa, j'ai quelques doutes concernant Nsimage.

Question 1:

Changer l'origine des limites d'une image ne semble pas avoir d'effet. Je m'attendais à ce que l'image soit tirée de l'origine nouvellement définie, mais cela ne semble pas dans le cas. Est-ce que je manque quelque chose?

code:

NSImage* carImage = [NSImage imageNamed:@"car"];

[self.imageView setImage:carImage];

//Following line has no effect:
self.imageView.bounds = CGRectMake(self.imageView.bounds.origin.x + 100, self.imageView.bounds.origin.y, self.imageView.bounds.size.width,self.imageView.bounds.size.height);

Noter: ImageView est un iboutlet

Question 2:

J'essayais de recadrer une image, mais cela ne semble pas recadrer l'image, je peux voir l'image complète. Qu'est-ce qui me manque?

code:

NSRect sourceRect = CGRectMake(150, 25, 100, 50);
NSRect destRect = CGRectMake(0, 0, 100, 50);

NSImage* carImage = [NSImage imageNamed:@"car"];

[carImage drawInRect:destRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0];

[self.imageView setImage:carImage];

Merci

Était-ce utile?

La solution

Changer l'origine des limites d'une image ne semble pas avoir d'effet. …

//Following line has no effect:
self.imageView.bounds = CGRectMake(self.imageView.bounds.origin.x + 100, self.imageView.bounds.origin.y, self.imageView.bounds.size.width,self.imageView.bounds.size.height);

C'est une vue d'image, pas une image.

L'effet de la modification des limites d'une vue dépend de ce que la vue fait pour dessiner. En effet, cela signifie que vous ne devriez pas modifier les limites d'une vue qui n'est pas une instance d'une classe de vue que vous avez créée, car vous ne pouvez pas prédire exactement comment un NsimageView dessinera son image (vraisemblablement, puisque c'est un contrôle, il implique sa cellule, mais plus que cela, je ne compterais pas).

Plus généralement, il est assez rare de changer d'origine des limites d'une vue. Je ne me souviens pas l'avoir fait, et je ne peux pas penser à une raison du haut de ma tête pour le faire. La modification de ses limites évoluera, pas la culture.

J'essayais de recadrer une image, mais cela ne semble pas recadrer l'image, je peux voir l'image complète. Qu'est-ce qui me manque?

[carImage drawInRect:destRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0];

[self.imageView setImage:carImage];

Dire une image à dessiner ne change rien sur l'image. Il ne «recadrera pas l'image» de sorte que l'image sera par la suite plus petite ou plus grande. Vous lui dites de dessiner, rien de plus.

Par conséquent, la déclaration après cela définit l'image de la vue de l'image sur l'image entière, exactement comme si vous n'aviez pas dit à l'image de dessiner, car lui dire de dessiner n'a fait aucune différence.

Ce que dire fait une image à dessiner est exactement cela: il dit à l'image de dessiner. Il n'y a que deux bons endroits pour ce faire:

  1. Entre lockFocus et unlockFocus Messages à une vue ou à une image (ou après la définition du nsgraphicsContext actuel).
  2. Dans une vue drawRect: méthode.

Partout ailleurs, vous ne devriez pas dire à un objet de cacao à dessiner.

Une façon correcte de recadrer une image consiste à créer une nouvelle image de la taille souhaitée / ajustée, à se concentrer sur elle, à dessiner la partie souhaitée de l'image d'origine et à déverrouiller la nouvelle image. Vous aurez alors à la fois la version originale et recadrée.

Une autre manière correcte serait de créer votre propre vue d'image personnalisée qui a deux propriétés: l'une possédant une image à dessiner, et l'autre tenant un rectangle. Lorsqu'on lui a dit de dessiner, cette vue personnalisée indiquerait à l'image de dessiner le rectangle donné dans les limites de la vue. Vous tiendriez ensuite toujours l'image d'origine et dessinez simplement uniquement la section souhaitée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top