Xin lỗi nếu điều này là hiển nhiên hoặc được bảo hiểm ở nơi khác, nhưng tôi đã googling cả ngày và đã không tìm thấy một giải pháp mà thực sự làm việc.Tôi có thể di chuyển nguồn gốc khi thực hiện chuyển đổi xoay trong Quartz 2D cho iPhone không?
Sự cố của tôi như sau: Tôi hiện đang vẽ hình ảnh ở chế độ toàn màn hình UIView, ví dụ vì chúng tôi sẽ nói hình ảnh ở góc dưới cùng bên phải của UIView. Tôi muốn làm một biến đổi xoay (CGAffineTransformMakeRotation) ở trung tâm của hình ảnh đó, tuy nhiên, theo mặc định lệnh xoay quay xung quanh trung tâm của UIView nó tự. Kết quả là, hình ảnh của tôi di chuyển xung quanh màn hình khi tôi xoay thay vì nó ở tại chỗ và xoay quanh trung tâm của chính nó.
Từ những gì tôi đã thu thập, tôi cần dịch ngữ cảnh của mình để gốc (trung tâm của UIView) ở giữa hình ảnh của tôi, Xoay và sau đó khôi phục ngữ cảnh bằng cách dịch trở lại vị trí ban đầu.
Sau đây là điều gần nhất tôi đã nhận được để làm việc, nhưng vấn đề là trong khi hình ảnh đang quay, nó di chuyển xuống trong khi nó quay. Tôi nghĩ rằng đây là do hoạt hình Tweening bước 1 dịch và bước thứ 3 dịch thay vì chỉ nhận ra rằng sự khởi đầu và kết thúc điểm trên dịch sẽ là như nhau ...
// Before this i'd make a call to a function that draws a path to a passed in context
CGAffineTransform inverseTranslation = CGAffineTransformMakeTranslation(transX, transY);
CGAffineTransform translation = CGAffineTransformMakeTranslation(-transX, -transY);
CGAffineTransform rot = CGAffineTransformMakeRotation(3.14);
CGAffineTransform final = CGAffineTransformConcat(CGAffineTransformConcat(inverseTranslation, rot), translation);
// Then i apply the transformation animation like normal using self.transform = final etc etc
Tôi cũng đã thử những thứ như thế CGContextTranslateCTM và CGContextSaveGState/UIGraphicsPushContext, nhưng chúng dường như có ít ảnh hưởng.
Tôi đã chiến đấu với điều này trong nhiều ngày và giải pháp hiện tại của tôi có vẻ gần gũi, nhưng tôi không có đầu mối làm thế nào để thoát khỏi dịch tweening đó. Có ai có một giải pháp cho điều này hay một cách tốt hơn để đi về điều này?
[cập nhật] Hiện tại tôi đang vẽ hình ảnh của mình ở giữa trung tâm UIview và sau đó đặt thuộc tính UIView.center thành nguồn gốc mà tôi muốn xoay và sau đó thực hiện lệnh xoay. Có vẻ như một chút của một hack, nhưng cho đến khi tôi có thể nhận được các dịch thực sự làm việc đó là sự lựa chọn duy nhất của tôi. Cảm ơn!
nhận xét nhanh- được chỉnh sửa để cho thấy rằng bạn nên sử dụng hằng số math.h khi làm việc với các giá trị pi. M_PI_4, M_PI_2, M_PI tốt hơn và chính xác hơn tất cả các lỗi làm tròn :) –