L'INTERFACE utilisateur personnalisée de Changement de Vue taille de l'image
J'ai un custom UIView qui dessine une image dans le tirage au sort rect méthode. Mon problème est UIView veut de moi, initWithFrame quand je allouer l'objet. L'image de la vue doit être la même que la taille de l'image et de la largeur. Le problème est que je ne comprends pas que la taille de l'image et de largeur jusqu'à ce que la méthode drawRect de la vue, je suis en train de créer. À l'intérieur de la drawRect vue de la modification de la UIView de l'image à la taille de l'image ne semble pas avoir d'effet. Donc, ce que je veux faire, c'est quelque chose comme ceci:
MyCustomView *myCustomView = [[MyCustomView alloc] initWithFrame: CGrectMake(0,0,0,0)];
Puis à l'intérieur de MyCustomView de la méthode drawRect je veux changer quelque chose à l'image de la vue à la taille du cadre de l'image, je suis en train de créer.
Comment puis-je obtenir mon résultat souhaité? Un pas, la création de l'image avant que je init mon affichage personnalisé et de mettre la taille des dimensions dans l'initWithFrame n'est pas une option.
C'est mon code actuel dans le point de vue de la méthode drawRect
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",self.imgName]];
CGSize imgSize = [image size];
CGRect newrect = CGRectMake(self.frame.origin.x, self.frame.origin.y, imgSize.width, imgSize.height);
self.frame = newrect; //This does nothing!!
CGRect imgRect = CGRectMake(0, 0, imgSize.width, imgSize.height);
[image drawInRect:imgRect];
OriginalL'auteur spentak | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
Si vous regardez la documentation pour setFrame il dit:
Il ne sera pas afficher de nouveau - généralement après le réglage de l'image que vous appelez setNeedsDisplay. mais, cela met en valeur vos poulets et des œufs problème. setNeedsDisplay causes drawrect à feu.
Aussi, comme Sulthan souligné, en faisant quelque chose de lourd comme le chargement des images dans drawRect n'est pas une bonne idée. C'est du lourd poids et des choses comme drawRect appelée à plusieurs reprises sur redimensionner etc...
Je voudrais créer un tel modèle (même si vous avez dit pas une option), ou la création d'une propriété de fixer l'image et l'image de la charge à l'époque.
OriginalL'auteur bryanmac
De changer l'image de l'intérieur de drawRect... n'est pas une très bonne idée.
Comment voulez-vous imaginer le système redimensionne quelque chose alors qu'il est en train de dessiner ça?
Également le chargement de l'image (opération lente) de l'intérieur drawRect (peut être appelé souvent) n'est pas une très bonne idée.
Vous devez charger l'image lorsque vous obtenez le nom du fichier et le changement de point de vue image à l'époque. Et probablement à l'aide de l'animation. L'utilisateur ne sera pas s'attendre à la vue de modifier sa taille sans animation.
Et:
Je ne peux pas imaginer n'importe quelle situation quand ce n'est pas une option. C'est seulement sur la façon dont vous l'architecture de votre code.
Ce qui est rapide est de dessiner une image dans drawRect. Ce n'est pas rapide est le chargement et le décodage des données de l'image. Vous devez le faire qu'une seule fois. Vous devez créer UIImage quelque part avant, et puis il suffit de le dessiner retourné, mis à l'échelle ou autrement transformées. Ne pas le créer encore et encore. UIImageView est probablement mis en œuvre exactement de la même manière, de sorte que votre application n'est pas un poids plus léger.
OriginalL'auteur Sulthan
Je ne comprends pas pourquoi ce n'est pas une option, mais OK. Vous possédez un bien immobilier sur votre point de vue,
self.imgName
. Lorsque cette fonction est activée (ce qui a avant l'image est tirée), vous devriez obtenir l'image, le travail de sa taille et de définir votre image à ce point.OriginalL'auteur jrturton