2010-06-13 38 views
6

Tôi có hình ảnh 100x100 pixel mà tôi muốn vẽ ở các góc khác nhau xoay quanh tâm của hình ảnh. Đoạn mã sau hoạt động, nhưng quay xung quanh origo ban đầu của hệ tọa độ (góc trên bên trái) và không phải vị trí đã dịch. Do đó hình ảnh không được xoay quanh chính nó mà là xung quanh góc trên bên trái của màn hình.Xoay xoay CGContext

Mã sau được chạy trong chế độ xem tùy chỉnh trong một ứng dụng trống không có gì khác ngoài việc này.

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(context, -50, -50); 
    CGContextRotateCTM (context, 0.3); 
    CGContextTranslateCTM(context,768/2,1024/2); 
    [image drawAtPoint:CGPointMake(0,0)]; 
} 

Tôi đã thử làm tương tự bằng cách sử dụng CGAffineTransform, nhưng có cùng kết quả.

+2

Không mã hóa cứng kích thước màn hình. Khi các nhà phát triển Mac phát hiện ra 22 năm trước, và các nhà phát triển iPhone phát hiện ra một tuần trước, kích thước của màn hình không liên tục mãi mãi. Làm cho bạn một ưu tiên lớn và yêu cầu màn hình lớn như thế nào. Hãy sẵn sàng cho ngày kích thước pixel của iPad thay đổi. –

+0

Tôi nghĩ tất cả những gì bạn cần làm là dịch trước khi bạn xoay. Các dịch thứ hai, di chuyển đến trung tâm của màn hình, sẽ không hoạt động như dự định bởi vì nó sẽ được trong các tọa độ xoay. – drawnonward

+1

Kích thước màn hình chỉ được mã hóa cứng vì đây là mẫu đơn giản để giải quyết vấn đề của tôi ... mã thực tế của tôi không đưa ra giả định như vậy :-) – kasperjj

Trả lời

22

Xoay luôn về nguồn gốc; những gì bạn cần làm là không đánh bại nó, nhưng để tận dụng nó.

Điều quan trọng cần nhớ ở đây là bản dịch dịch chuyển nguồn gốc. Vì vậy, nếu bạn muốn đặt hình ảnh ở giữa màn hình và xoay hình ảnh xung quanh trung tâm đó, những gì bạn cần làm là:

  1. Di chuyển gốc đến giữa màn hình.
  2. Xoay theo số tiền mong muốn. (Hãy tưởng tượng các đầu cực của trục x di chuyển khi bạn làm điều này, đầu bên trái nghiêng xuống, và đầu bên phải nghiêng lên.)
  3. Di chuyển xuất xứ “trái” và “xuống” (cả hai đều nằm dọc theo x và y trục) bằng một nửa kích thước của hình ảnh.

Hãy tưởng tượng chuyển động của hình ảnh trên iPad qua từng bước này. Hoặc, tốt hơn, hãy ghi chú sau nó và mô phỏng nó bằng tay:

  1. Bắt đầu với ghi chú ở một góc của iPad.
  2. Di chuyển ghi chú sao cho góc đó của ghi chú nằm ở giữa iPad.
  3. Xoay ghi chú quanh góc đó.
  4. Di chuyển ghi chú "trái" (tương đối so với chính nó) bằng một nửa chiều rộng của nó và "xuống" (tương đối so với chính nó) bằng một nửa chiều cao của nó.

Bạn sẽ nhận thấy rằng ghi chú kết thúc bằng xoay và ở giữa.