是否有任何方法可以将旋转视图的变换传递给其子视图? 我有一个自定义MKAnnotationView,我根据用户的标题值旋转。在自定义Annotation视图类的下面方法中,我将一个子视图添加到注释视图。
- (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添加为子视图之前,是否需要对myCallOutView应用一些转换?
答案 0 :(得分:6)
一个非常简单的解决方案是在子视图上执行反向旋转:
[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的子视图,而不是在视图B中使用视图A.然后只需将您的旋转应用于视图A,B不会受到影响。要在显示屏上移动整个集合,请重新定位容器视图C.