2012-01-06 25 views
23

Nếu tôi hiểu chính xác mở rộng, hãy UIView với CGAffineTransform neo chuyển đổi đến trung tâm của nó.Quy mô với CGAffineTransform và đặt neo

Đặc biệt:

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

Prints:

-50;-50;200;200 

Làm thế nào để bạn tạo một quy mô CGAffineTransform có sử dụng một điểm neo cụ thể (chẳng hạn 0; 0)?

+13

Đó là lạ, tôi đang trên iOS 7 và nó không quy mô từ trung lộ nhưng nó quy mô từ phía trên cùng bên trái ... Ngay cả khi tôi đặt điểm neo thành (0,5, 0,5), nó không co giãn từ tâm. Bất cứ ai có một ý tưởng? –

+2

@VanDuTran Tôi thấy rằng việc sử dụng 'CATransform3D' trên lớp' của lớp xem hoạt động chính xác và tuân theo 'anchorPoint'. Hãy thử điều đó thay vì sử dụng 'CGAffineTransformMakeScale', bằng cách nào đó sẽ hạn chế khung nhìn đến giới hạn trên cùng của cửa sổ và bên trái. –

+0

@JonathanLin Tôi sử dụng lớp với CATransform3D cũng không có may mắn trên phương thức iOS 7 – ZYiOS

Trả lời

57

(a)

Quy mô và sau đó dịch?

Cái gì như:

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

(b)

Đặt điểm neo (mà có lẽ những gì bạn muốn thực sự)

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

(c)

Đặt trung tâm một lần nữa để chắc chắn rằng nó ở cùng một vị trí?

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

Phương pháp (a) in 50; 50; 200; 200 với thang đo 2. Phương pháp thử nghiệm (b) không lâu, nhưng điều đó sẽ không ảnh hưởng đến tất cả biến đổi? Có thể gây ra tác dụng phụ. – hpique

+0

Đó là vì biến đổi tỷ lệ đầu tiên sẽ ảnh hưởng đến lần thứ hai. Thứ tự bạn áp dụng biến đổi quan trọng;) Và nếu nó chỉ là một bản dịch bạn đang cố gắng làm thì tôi không chỉ đặt khung/giới hạn/trung tâm sang vị trí mới? – deanWombourne

+0

Điều thú vị là phương thức (a) in 0; 0; 300; 300 với thang tỷ lệ 3 và --50; -50; 400; 400 với thang điểm 4. Có thể có điều gì đó bị thiếu? – hpique

2

Thứ nhất #import <QuartzCore/QuartzCore.h> và sau đó thiết lập các điểm neo của xem của bạn:

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

Điều đó sẽ thay đổi điểm neo cho tất cả các biến đổi. Tôi muốn tạo ra một quy mô biến đổi với một điểm neo cụ thể. – hpique

+0

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

Các vấn đề liên quan