2009-08-18 10 views

Répondre

1

Comment puis-je utiliser Core Graphics pour ... dessiner un simple point de largeur fixe (par exemple, 10 pixels de diamètre) et d'une certaine couleur [?]

  1. Set the fill color.
  2. Move to the point.
  3. Plot an arc, centré sur le point, avec le rayon désiré, donnant un angle de départ de 0 et un angle de fin de 2 * M_PI.
  4. Close the path.
  5. Fill.

... dessiner l'intérieur d'un UIImageView instancié (Aucun fichier de classe pour remplacer drawRect avec - juste une référence à l'instance)

Je sais que sur le Mac, ce n'est vraiment pas une bonne idée, car un NSView peut être redessiné à tout moment si quelque chose l'a configuré comme ayant besoin d'être affiché (ou lui a dit de l'afficher directement), et ensuite écraser tout ce que vous avez dessiné dessus. Aucune idée sur l'iPhone, mais je remarque que UIView n'a pas de méthodes comme lockFocus et unlockFocus de NSView.

Il y a une raison plus architecturale de ne pas faire cela: le dessin est le domaine exclusif des vues, et vous proposez de casser cette exclusivité et de saupoudrer du code de dessin dans (je suppose) un contrôleur. Le code de diffusion pour un but dans un objet qui n'a pas cet objectif est un chemin vers un code désordonné et non navigable.

Mieux vaut faire une sous-vue pour chaque point et les ajouter comme sous-vues de la vue de l'image, ou sous-classe UIImageView, donnez votre exemple de cette sous-classe un tableau des points à dessiner, et ont drawRect: appel à super de la sous-classe avant dessiner ses points.

La solution ci-dessus entre alors dans drawRect:.

1

Vous pouvez également ajouter une couche d'animation de base à la vue. Définissez le rayon du coin à la moitié de la taille du point que vous voulez (en supposant un carré) et il se traduira par un cercle. Quelque chose comme:

CALayer *layer = [CALayer layer]; 
[layer setBounds:CGRectMake(0.0f, 0.0f, 10.0f, 1.0f)]; 
[layer setCornerRadius:5.0f]; 
[layer setMasksToBounds:YES]; 
[layer setBackgroundColor:[[UIColor redColor] CGColor]]; 

// Center the layer in the view. 
[layer setPosition:CGPointMake([view bounds].size.width/2, 
          [view bounds].size.height/2)]; 

// Add the layer to your view 
[[view layer] addSublayer:layer]; 

Non Core Graphics exactement, mais il est facile à mettre en œuvre.

Cordialement,

Questions connexes