2009-11-17 6 views
3

Puis-je obtenir le contexte (CGContextRef) à partir de UIImageView?Obtenir le contexte à partir de UIImageView

Détail: J'ai un lien de contrôleur vers le fichier xib. Dans IB j'ai ajouté un UIImageView et faire référence à son sur:

IBOutlet UIImageView *imageView; 

Maintenant, dans viewDidLoad Comment obtenir le contexte UIImageView (CGContextRef)?

Avant cela, si j'utilise:

CGContextRef context = UIGraphicsGetCurrentContext(); 

sortie:

<Error>: CGContextTranslateCTM: invalid context 

suggèrent?

+0

Que voulez-vous FAIRE avec le contexte? Les contextes ne sont valides que lorsque vous les créez vous-même ou dans le contexte (désolé) d'un appel drawRect:. –

Répondre

3

Si vous souhaitez utiliser vos propres méthodes de dessin, vous devez les appliquer dans la méthode drawRect: de l'UIView. Vous devez sous-classer UIView pour créer votre propre logique de dessin: Dans XCode, utilisez File-> New File et sélectionnez UIView comme un modèle qui vous donnera le cadre de base. Dans Interface-Builder, vous pouvez d'abord ajouter une nouvelle vue, puis la définir en utilisant votre classe sous l'onglet Identité de la fenêtre Inspecteur.

La méthode devrait alors commencer par quelque chose comme cela pour vous donner une référence au contexte:

- (void)drawRect:(CGRect)fr { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    ... DRAWING CODE ... 
} 

Cette méthode est automatiquement appelée lorsque la vue est d'abord affiché. Si votre logique dépend de certaines variables, vous devez appeler setNeedsDisplay dans l'UIView pour que la vue réexécute la logique de dessin.

Cependant, cela ne fonctionnera pas sur UIImageView (LINK):

sous-classement Remarques

Considérations particulières

La classe UIImageView est optimisé pour dessiner ses images à l'affichage. UIImageView n'appellera pas drawRect: une sous-classe. Si votre sous-classe a besoin d'un code de dessin personnalisé, il est recommandé d'utiliser UIView comme classe de base.

2

Ajouter un appel à UIGraphicsBeginImageContext (self.frame.size); avant UIGraphicsGetCurrentContext(); Cela fonctionnera.

UIGraphicsBeginImageContext(self.frame.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
+0

Merci beaucoup! –