ios - 变换旋转后定位 View

标签 ios rotation linear-algebra cgaffinetransform affinetransform

我正在创建一个自定义的弹出框背景,所以我继承了 UIPopoverBackground 抽象类。在创建布局函数时,我遇到了放置和旋转背景箭头的问题。

第一张图片显示了所需位置的箭头。在下面的代码中,我计算了我想要的原点,但旋转似乎已经将图像的新位置平移到一边大约 11 点。如您所见,我创建了一个 hack 解决方案,我将箭头移动了 11 个点。但这仍然不能掩盖我在数学技能上存在漏洞的事实。如果有人愿意向我解释这里发生了什么,我将永远感激不已。还有一个不涉及魔数(Magic Number)的解决方案会很好,这样我就可以将此解决方案应用于带有向上、向下和向右箭头的情况

screen shot

#define ARROW_BASE_WIDTH 42.0
#define ARROW_HEIGHT 22.0

    case UIPopoverArrowDirectionRight:
    {
        width -= ARROW_HEIGHT;
        float arrowCenterY = self.frame.size.height/2 - ARROW_HEIGHT/2 + self.arrowOffset;
        _arrowView.frame = CGRectMake(width,
                                      arrowCenterY,
                                      ARROW_BASE_WIDTH,
                                      ARROW_HEIGHT);
        rotation = CGAffineTransformMakeRotation(M_PI_2);
        //rotation = CGAffineTransformTranslate(rotation, 0, 11);
         _borderImageView.frame = CGRectMake(left, top, width, height);
        [_arrowView setTransform:rotation];
    }
    break;

最佳答案

好吧,如果围绕箭头 View 的中心应用旋转(按原样),则会在旋转后左侧留下 (ARROW_BASE_WIDTH - ARROW_HEIGHT)/2 的间隙箭头,这似乎是你必须补偿的。通过将箭头 View 的中心偏移这么多,它应该会重新对齐。

关于ios - 变换旋转后定位 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410565/

相关文章:

javascript - iPhone JavaScript Web 应用程序的地理定位

ios - 如何在 AFNetworking 的帮助下发出 Twilio api Post 请求?

javascript - 有没有办法从 4x4 矩阵计算 X 和 Y 轴上的 3D 旋转

c - 如何求解 C 语言中的特定方程组(可能使用循环)

c++ - 超定线性代数方程的最小二乘解Ax = By

Python 相当于 R 中的 Matrix::chol 和 Matrix::solve?

iOS 奇怪日志 NETAWDManager

ios - UIScrollView 中的动画转换

iphone - iphone5 IOS录音时如何使用振动?

c++ - OpenGL:如何使光与旋转无关?