变换旋转后定位视图

时间:2013-01-19 02:32:52

标签: ios rotation linear-algebra cgaffinetransform affinetransform

我正在创建自定义弹出窗口背景,因此我将UIPopoverBackground抽象类子类化。在创建布局功能时,我遇到了放置和旋转背景箭头的问题。

第一张照片显示所需位置的箭头。在下面的代码中,我计算了我想要的原点,但是旋转似乎已经将图像的新位置转移到了大约11点的边。正如你所看到的,我创建了一个黑客解决方案,我将箭头移动了11个点。但这仍然没有掩盖我在数学技能上有一个空洞的事实。如果有人愿意向我解释这里发生了什么,我将永远感激不尽。什么也不错的是一个不涉及魔术数字的解决方案,以便我可以使用向上,向下和向右箭头将此解决方案应用于案例

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;

1 个答案:

答案 0 :(得分:2)

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