• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - 将 CGAffineTransformRotation 关联到 CGAffineTransformTranslation

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:56:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用 CGAffineTransformRotate 旋转基于触摸手势添加到父 View 上的自定义 View (VIEWA)。一切正常。现在,我在父 View 上添加了另一个 View (VIEWB),它应该在旋转时遵循 VIEWA 的角所追踪的路径。

我所做的是从 VIEWA 转换矩阵计算 VIEWB 的新坐标并翻译 subview 。即

VIEWA.transform = CGAffineTransformRotate(startTransform, -angleDifference+M_PI_2);
CGFloat cosa = VIEWA.transform.a;
CGFloat msinb = VIEWA.transform.b;
CGFloat sinc = VIEWA.transform.c;
CGFloat cosd = VIEWA.transform.d;

CGFloat newX = VIEWB.center.x * cosa + VIEWB.center.y * msinb;
CGFloat newY = VIEWB.center.x * sinc + VIEWB.center.y * cosd;

CGFloat xdiff = newX - VIEWB.center.x;
CGFloat ydiff = newY - VIEWB.center.y;

VIEWB.transform = CGAffineTransformTranslate(VIEWB.transform, xdiff, ydiff);

但我无法得到我想要的。有人可以帮我吗?

更新:

这就是我想要做的红点是A,黑色弹出是B):

enter image description here



Best Answer-推荐答案


我假设您旋转 View A,但红色圆圈停留在 View A 坐标系中的固定位置。因此,在 View A 的坐标系中,红色圆圈的中心应该很容易计算,如下所示:

CGPoint redCircleCenterInViewA = CGPointMake(CGRectGetMidX(viewA.bounds), 12);

您可以简单地将该点转换为父 View 的坐标系,如下所示:

CGPoint redCircleCenterInParentView = [viewA convertPoint:redCircleCenterInViewA
    toView:viewA.superview];

然后您可以将 View B 的中心设置为该点,减去 View B 高度的一半:

viewB.center = CGPointMake(redCircleCenterInParentView.x,
    redCircleCenterInParentView.y - viewB.frame.size.height / 2);

更新

我看到您实际上有 layer A,而不是 view A。这只需要稍作修改。您发送到图层以转换坐标的消息与您发送到 View 的消息略有不同。

CALayer *layerA = ...;
UIView *parentView = ...;
UIView *viewB = ...;

CGPoint redCircleCenterInLayerA = CGPointMake(CGRectGetMidX(layerA.bounds), 12);

CGPoint redCircleCenterInParentView = [layerA convertPoint:redCircleCenterInLayerA
    toLayer:parentView.layer];

viewB.center = CGPointMake(redCircleCenterInParentView.x,
    redCircleCenterInParentView.y - viewB.frame.size.height / 2);

请注意,还有 convertPoint:fromLayer:convertPoint:fromView: 消息。不要让 Xcode 自动补全错误,否则你会摸不着头脑!

关于iphone - 将 CGAffineTransformRotation 关联到 CGAffineTransformTranslation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379959/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap