2011-07-16 5 views
2

J'ai un UIView qui contient un autre UIView. L'UIView externe trace une bordure autour de l'UIView interne via drawRect. (La bordure est trop compliquée pour être dessiné via les propriétés CALayer.)Comment créer un UIView "extensible"

Actuellement, lorsque j'anime le redimensionnement de l'UIView externe, sa méthode drawRect est appelée une fois au début de l'animation et le résultat est étiré ou réduit . Cela ne semble pas bien.

Je cherche un moyen de redessiner le contenu à chaque étape de l'animation, ou trouver un moyen d'obtenir le même effet visuel. (Le résultat doit être similaire au redimensionnement d'un UIImage étirables.)

Répondre

0

J'ai fini par ajouter des sous-vues avec des masques autorésisants qui les maintenaient correctement positionnés pendant l'animation.

-1

Vous devez envoyer un [UIView setNeedsToDisplay] à la vue pour chaque fois que la taille de l'image est modifiée, vous pouvez essayer redéfinissant la setFrame: méthode comme

- (void)setFrame:(CGRect)r 
{ 
    [super setFrame:r]; 
    [self setNeedsToDisplay]; 
} 
+1

Vous n'avez pas besoin d'appeler 'setNeedsDisplay' si votre vue a' contentMode == UIViewContentModeRedraw'. – Andriy

1

Vous devriez changer d'image de type de contenu à:

your_view.contentMode = UIViewContentModeRedraw; 

Et il va redessiner chaque fois que ses changements de cadre.

+0

Malheureusement, cela ne fonctionne pas, car le cadre ne change qu'une seule fois. – titaniumdecoy

Questions connexes