web-dev-qa-db-ja.com

CGAffineTransformでスケーリングし、アンカーを設定します

UIViewを使用してCGAffineTransformを正しくスケーリングすると、変換がその中心に固定されます。

特に:

self.frame = CGRectMake(0,0,100,100);
self.transform = CGAffineTransformMakeScale(2, 2);
NSLog(@"%f;%f;%f;%f", self.frame.Origin.x, self.frame.Origin.y, self.frame.size.width, self.frame.size.height); 

プリント:

-50;-50;200;200

特定のアンカーポイント(0; 0など)を使用するCGAffineTransformスケールをどのように作成しますか?

30
hpique

(a)

スケーリングしてから翻訳しますか?

何かのようなもの :

CGAffineTransform t = CGAffineTransformMakeScale(2, 2);
t = CGAffineTransformTranslate(t, width/2, height/2);
self.transform = t;

(b)

アンカーポイントを設定します(これはおそらく実際に必要なものです)

[self layer].anchorPoint = CGPointMake(0.0f, 0.0f);
self.transform = CGAffineTransformMakeScale(2, 2);

(c)

中心をもう一度設定して、同じ場所にあることを確認しますか?

CGPoint center = self.center;
self.transform = CGAffineTransformMakeScale(2, 2);
self.center = center;
67
deanWombourne

まず#import <QuartzCore/QuartzCore.h>そして、ビューのアンカーポイントを設定します。

   [[self layer] setAnchorPoint:CGPointMake(0, 0)];
4
Mudit Bajpai