có cách nào để xoay UIImage xung quanh điểm bên ngoài bằng cách sử dụng CGAffineTranformMAkeRotation không? tnx rất nhiều!CGAffineTransformMakeRotation xung quanh điểm bên ngoài
Trả lời
Đây là một chức năng sử dụng cùng định dạng như CoreGraphics CGAffineTransform Định dạng API.
Công trình này hoạt động chính xác cách các API "RotateAt()" khác hoạt động.
Thao tác tương ứng với đặc điểm kỹ thuật sau: dịch (pt.x, pt.y); xoay (góc); dịch (-pt.x, -pt.y);
CGAffineTransform CGAffineTransformMakeRotationAt(CGFloat angle, CGPoint pt){
const CGFloat fx = pt.x, fy = pt.y, fcos = cos(angle), fsin = sin(angle);
return CGAffineTransformMake(fcos, fsin, -fsin, fcos, fx - fx * fcos + fy * fsin, fy - fx * fsin - fy * fcos);
}
Giống như với CGAffineTransformMakeRotation()
, góc bằng radian chứ không phải độ.
Tôi vừa chụp ảnh này. Một cái gì đó như sẽ cung cấp cho bạn những kết quả mà bạn đang tìm kiếm ...
- (void)rotateView:(UIView *)view aroundPoint:(CGPoint)point withAngle:(double)angle{
//save original view center
CGPoint originalCenter = view.center;
//set center of view to center of rotation
[view setCenter:point];
//apply a translation to bring the view back to its original point
view.transform = CGAffineTransformMakeTranslation(originalCenter.x, originalCenter.y);
//multiply the view's existing rotation matrix (the translation) by a rotation and apply it to the view
//thereby making it rotate around the external point
view.transform = CGAffineTransformConcat(view.transform, CGAffineTransformMakeRotation(angle));
}
Chỉ cần giải thích lý luận của tôi một chút ...
Những gì chúng tôi về cơ bản làm là thể chất thay đổi quan điểm đến điểm xoay vòng, sau đó áp dụng một bản dịch để làm cho nó trông giống như nó vẫn ở điểm gốc. Sau đó, nếu chúng ta nhân một vòng quay với bản dịch mới của khung nhìn, về cơ bản chúng ta xoay toàn bộ khung nhìn và hệ tọa độ của nó, do đó, nó giống như xoay vòng quanh điểm đã cho. Tôi hy vọng tôi đã giải thích rõ điều đó. : | Nếu không, tôi đề nghị tìm kiếm ma trận chuyển đổi trực tuyến có thể bạn có thể tìm thấy giải thích tốt hơn về cách chúng ngăn xếp ở đó!
Đặt anchorPoint của lớp xem hình ảnh thành thứ gì đó bên ngoài (0,0) và (1,1), tức là view.layer.anchorPoint = CGPointMake (2, 2).
Nếu bạn đi với điều này hãy nhớ hai điều: a) điều này sẽ hoàn toàn thay đổi nơi chế độ xem của bạn được vẽ, không chỉ chuyển đổi b) giá trị x và y của anchorPoint là bội số của kích thước khung nhìn. Chúng không nằm trong hệ tọa độ xem chính. – mjisrawi
Tôi đã giải quyết theo cách này: Tôi đặt UIImage mà tôi muốn xoay sang chế độ xem khác. Chế độ xem lớn nhất so với chế độ xem hình ảnh để điểm trung tâm của chế độ xem là điểm ngoài uiimage, vì vậy tôi xoay chế độ xem ....
- 1. Đặt đường viền xung quanh các điểm
- 2. Đường viền menu thả xuống CSS tinh khiết xung quanh bên ngoài chỉ
- 3. Tại sao sử dụng "C" bên ngoài xung quanh một không gian tên C++
- 4. tọa độ GPS: 1km vuông xung quanh một điểm
- 5. Khoảng trắng xung quanh hình ảnh
- 6. Border xung quanh kết cấu, OpenGL
- 7. WPF - Biên giới xung quanh một itemscontrol
- 8. Đặt đường viền xung quanh StackPanel.
- 9. divs sụp đổ xung quanh tiêu đề
- 10. UIImageView "bị đè bẹp" sau CGAffineTransformMakeRotation
- 11. Dự án thú vị nhất xung quanh python là gì?
- 12. Làm mịn đất xung quanh các hồ
- 13. Thiết kế SQL xung quanh thiếu tham chiếu khóa ngoài cơ sở dữ liệu chéo
- 14. Xóa thêm khoảng trống xung quanh Listbox
- 15. Hộp xung quanh văn bản trong matplotlib
- 16. Win32: Làm việc xung quanh cho GetFileAttributes()
- 17. Đặt đường viền xung quanh UIImageView
- 18. Newtype xung quanh ST gây loại lỗi
- 19. -webkit-transform dịch xung quanh trung tâm
- 20. Cảm biến môi trường xung quanh
- 21. Bọc văn bản xung quanh Xem
- 22. Đường viền màu trắng xung quanh GroupBox
- 23. Làm việc xung quanh SpellCheckerSự rò rỉ?
- 24. Bóng hộp xung quanh các góc tròn?
- 25. Làm thế nào để xoay đối tượng xung quanh một điểm bằng cách sử dụng quaternions?
- 26. Vẽ bán kính xung quanh một điểm trong bản đồ Google
- 27. Làm thế nào để xoay một đối tượng qua lại xung quanh một điểm cụ thể?
- 28. quay một đối tượng xung quanh một điểm cố định trong OpenGL
- 29. Làm việc xung quanh celerybeat là một điểm duy nhất của sự thất bại
- 30. Làm thế nào để giảm biên giới xung quanh các điểm phụ trong MATLAB?
Tôi giả định pt là một trung tâm? – Andy
Tại sao bạn không thể thực hiện 'var t = CGAffineTransformMakeTranslation (-pt.x, -pt.y)' và sau đó thực hiện xoay vòng với 't = CGAffineTransformRotate (t, angel)' và sau đó dịch ngược lại với 'var t = CGAffineTransformTranslate (t, pt.x, pt.y) '? – Adam
@Adam Đó là 3 điều bạn phải làm. Câu trả lời của tôi là một cuộc gọi để làm cả ba. Vô cùng tối ưu. Vui lòng đọc lại câu trả lời của tôi, đặc biệt là dòng thứ 3 trước mã. – Andy