2012-01-06 25 views
23

UIView'u CGAffineTransform ile ölçeklendirmeyi doğru anlıyorsam, dönüşümü merkeze sabitler. ÖzellikleCGAffineTransform ile ölçeklendirin ve bağlantıyı ayarlayın

:

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); 

Baskılar:

-50;-50;200;200 

Nasıl belirli bir çapa noktasını kullanan bir CGAffineTransform ölçek oluştururum (diyelim 0; 0)?

+13

O ı iOS 7'de değilim ve merkezden ölçeklendirmez, ama nereden ölçekler, garip sol üst ... Bağlantı noktasını (0,5, 0,5) olarak ayarladığım halde merkezden ölçeklenmez. Herkesin bir fikri var mı? –

+2

@VanDuTran View ''layer'' 'catransform3D' kullanarak doğru davranır ve' anchorPoint' uyuyor bulundu. Bir şekilde pencerenin üst ve sol sınırlarını görüntülemeyi kısıtlayan 'CGAffineTransformMakeScale' kullanmak yerine bunu deneyin. –

+0

@JonathanLin Ben de iOS 7 – ZYiOS

cevap

57

(a)

Ölçeklendirin ve sonra çevir?

şey gibi:

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)

Set (gerçekten ne istediğini muhtemelen budur) çapa noktasını ayarlayın aynı yerde olduğundan emin olmak için tekrar merkez mi?

CGPoint center = self.center; 
self.transform = CGAffineTransformMakeScale(2, 2); 
self.center = center; 
+0

üzerinde hiçbir şansla CATransform3D ile katman kullanıyorum Yöntem (a) 2 bir ölçek ile 50; 50; 200; 200 yazdırır. Kısa bir süre içinde test yöntemi (b) olacak, ama tüm dönüşümleri? Yan etkisi olabilir. – hpique

+0

Çünkü ilk ölçek dönüşümü ikinciyi etkileyecektir. Uyguladığınız sıra, konuyu dönüştürür;) Ve eğer yapmaya çalıştığınız bir çeviri ise, o zaman sadece çerçevemi/sınırları/merkezini yeni pozisyona getirmemek? – deanWombourne

+0

İlginç bir şekilde, yöntem (a) 0; 0; 300; 300'ü 3 ve --50; -50; 400; 400'lük bir ölçekle yazdırır. Belki bir şey eksik midir? – hpique

2

Öncelikle <QuartzCore/QuartzCore.h> #import ve sonra bakış bağlantı noktalarını ayarlayın:

[[self layer] setAnchorPoint:CGPointMake(0, 0)]; 
+1

Bu, tüm dönüşümler için bağlantı noktasını değiştirir. Belirli bir çapa noktası ile bir ölçek dönüşümü oluşturmak istiyorum. – hpique

+0

CGAffineTransform tr = CGAffineTransformScale (self.transform, 2, 2); self.transform = tr; self.center = CGPointMake (0,0); –

İlgili konular