4

有没有什么方法可以将旋转视图的变换传递给它的子视图?我有一个自定义的 MKAnnotationView,我正在根据用户的标题值进行旋转。在自定义注释视图类的以下方法中,我将子视图添加到注释视图。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    if(selected)
{
  [self addSubview:self.myCallOutView];
  return;
}
  [self.myCallOutView removeFromSuperview];


}

但问题是当我的注释视图旋转然后我选择任何注释时,myCallOutView 也会出现我不想要的旋转。我正在使用下面的行旋转自定义注释视图

  [self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)];

我怎样才能避免这种情况?在将其添加为子视图之前,我是否需要在 myCallOutView 上应用一些转换?

4

1 回答 1

7

一个非常简单的解决方案是在子视图上执行反向旋转:

[self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)];
// NOTE: we're using the negative of the angle here
[self.myCallOutView setTransform:CGAffineTransformMakeRotation(- angle * M_PI / -180.0)]];

这将抵消旋转对超级视图的影响。

替代方法:构造您的视图略有不同:视图 A 和视图 B 不是视图 B 中的视图 A,而是视图 A 和 B 作为容器视图 C 的子视图。然后只需将您的旋转应用于视图 A,B 不会受到影响。要在显示器上移动整个整体,请重新定位容器视图 C。

于 2013-03-21T11:43:05.937 回答