Quelle est la meilleure façon de normaliser les valeurs code> CGRRRE code> de manière à être comprise entre 0 et 1 (système de coordonnées unitaire)? P>
3 Réponses :
Cela devrait faire l'affaire. Vous avez juste besoin de tout diviser par la largeur / la hauteur de la vue ou de la couche parent.
CGFloat parentWidth = parentView.bounds.size.width; CGFloat parentHeight = parentView.bounds.size.height; CGRect rectToConvert = ...; rectToConvert.origin.x /= parentWidth; rectToConvert.origin.y /= parentHeight; rectToConvert.size.width /= parentWidth; rectToConvert.size.height /= parentHeight;
Pourquoi divisez-vous les coordonnées d'origine par la taille?
@Samuscambell peut-être parce que c'est nécessaire?
Cela reviendra un cgfloat code> entre 0 et 1 - qui est ce que l'utilisateur a demandé ..
@Seamuscambell Je vous suggère de lire sur "Coordonnées de l'unité": développeur.apple.com/Library/mac/documentation/cocoa/conceptu al / ...
Que diriez-vous:
CGRect rectToConvert;
NSAffineTransform *n = [NSAffineTransform transform];
[n scaleXBy:rectToConvert.size.width
yBy:rectToConvert.size.height];
[n invert];
CGRect normalizedRect;
normalizedRect.origin = [n transformPoint:rectToConvert.origin];
normalizedRect.size = [n transformSize: rectToConvert.size];
CGPoint anyPointINeedToConvert;
CGPoint convertedPoint = [n transformPoint:anyPointINeedToConvert];
Une manière très concise de faire cela serait:
@Codafi Ce n'est rien à voir avec CGRectIntegral. Il s'agit de la conversion d'un système de coordonnées «unité» pour travailler avec diverses méthodes de Calayer.
Pour tous les examinateurs ou mods, les deux votes rapprochés sont totalement invalides.
Elles sont. Je n'ai pas tout lu la question. Je ne suis pas sûr des autres, cependant.
Voulez-vous dire que vous souhaitez considérer la largeur existante comme 1 et la hauteur existante comme 1, ou voulez-vous dire que vous souhaitez tout le recttacle, avec ses proportions actuelles, de s'inscrire dans une coordonnée 1x1 "Boîte"?
Bonjour, cela peut faire un peu plus de sens, ce sont les instructions du filtre "CropRegion: une zone rectangulaire pour récolter de l'image, normalisée pour coordonner de 0,0 à 1,0. La position (0,0, 0,0) est en haut à gauche de l'image. "