Comment puis-je augmenter la taille d'un CGRect par un certain pourcentage de la valeur?
Comment puis-je augmenter la taille d'un CGRect par un certain pourcentage de la valeur? Dois-je utiliser une certaine forme de CGRectInset
faire?
Exemple:
Supposons que j'ai un CGRect: {10, 10, 110, 110}
Je veux augmenter la taille (en conservant le même point central) de 20% à la:
{0, 0, 120, 120}
pour 2017, il est
insetBy
OriginalL'auteur brandonscript | 2014-11-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
CGRectInset
si vous le souhaitez:Diminution de la taille, retirer le
-
s.Note de côté: Un
CGRect
qui est 20% plus grand que{10, 10, 100, 100}
est{0, 0, 120, 120}
.Modifier: Si l'intention est d'augmenter par région, puis ça va le faire (même pour les rectangles qui ne sont pas d'équerre):
Je suppose que cela dépend de votre interprétation de "20% de plus grand". Par région, la place a des arêtes de longueur
109.5445
, ce qui n'est pas aussi jolie que juste en supposant qu'il voulait augmenter le bord de la taille de 20%.Je voulais augmenter bord de tailles mais vous avez raison, le domaine serait un tout autre calcul, et c'est une bonne réponse.
Bonne chose, j'inclus les deux à la fois. 🙂
Sélectionné comme réponse parce que ^
OriginalL'auteur Ian MacDonald
Dans Swift:
En ObjC:
J'ai ajouté qu'en tant que bien, merci!
+1 pour être la seule répondeur avoir obéi d'Apple indiquant que "vos applications devraient éviter directement la lecture et l'écriture des données stockées dans le CGRect structure de données. Au lieu de cela, utiliser les fonctions décrites ici pour manipuler des rectangles, et récupérer leurs caractéristiques." — developer.apple.com/Library/ios/documentation/GraphicsImaging/...
Apple est stupide. J'ai mis à jour ma réponse pour se conformer à elle de toute façon. :/
Seconde près, et en fait, j'aime cette réponse, car il est obtenu à la fois Objc et rapide 😉
OriginalL'auteur Logan
Assurer, à l'aide de
CGRectInset
travaux:OriginalL'auteur rmaddy
L'utilisation de Swift, vous pouvez conserver le point du centre (par rapport à la source Rect) et augmenter/diminuer la taille comme suit à l'aide d'une extension:
OriginalL'auteur Nick
Swift 4 extension inspiré par plusieurs des réponses ici avec des procédures simplifiées pour les calculs:
Utilisation est simple:
Si vous êtes intéressé à essayer mes méthodes d'essai:
OriginalL'auteur user1806529
Méfiez-vous que cette approche va également changer x et y du rectangle.Comme le commentaire ci-dessus, cela permet de ne pas garder le point central de la rect!
OriginalL'auteur Taras