【问题标题】:Rotate only view and not its subviews仅旋转视图而不旋转其子视图
【发布时间】:2013-03-21 11:40:13
【问题描述】:

有没有什么方法可以将旋转视图的变换传递给它的子视图? 我有一个自定义的 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 添加为子视图之前,我是否需要对其应用一些转换?

【问题讨论】:

    标签: ios objective-c mkmapview mkannotation


    【解决方案1】:

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

    [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 都不是容器视图 C 的子视图,而不是视图 A 和视图 B。然后只需将旋转应用于视图A、B 不受影响。要在显示器上移动整个整体,请重新定位容器视图 C。

    【讨论】:

    • 是的,我会尝试的,我认为它会起作用..顺便说一句,您需要对您的个人资料图片进行一些转换..:p
    • 对于面临同样问题的人,我使用 oculus 在上述答案中提到的替代方法解决了问题,因为在子视图上执行反向旋转不会旋转子视图,但它的框架会受到影响。选择第二种方法
    • 嗨,Occulus,上面的代码工作正常,子视图组件的大小正在发生变化。如何解决这个问题
    • @KavithaMadhu 为了获得帮助的最佳机会,请使用示例代码发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多