2013-03-21 134 views
3

有没有什么方法可以将视图的变换传递给子视图? 我有一个自定义的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上应用一些转换?

回答

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)]]; 

这将抵消对上海华旋转的效果。

替代做法:结构你的观点有点不同:不是有观点看法的内部B A,有两种观点A和B是一个容器视图下的子视图然后,只需应用您的旋转查看A,B赢了不会受到影响。并移动显示器上的整个集合,重新放置容器视图C.

+4

是的好我会尝试它,我认为它会工作..Btw你需要应用一些变换到你的个人资料图片..:p – 2013-03-21 11:47:54

+1

人们面临着同样的问题,我通过使用occulus上述答案中提到的替代方法解决了这个问题,因为在子视图上执行反转不会旋转子视图,但其框架将受到影响。去第二种方法 – 2013-03-22 07:09:19