2013-11-09 42 views
0

我有点坚持用旋转一个UIView时,我有一个问题。CGAffineTransformMakeRotation UIView的腐败

我有一个叫做“updatePositions”方法,该方法将视图的当前帧的左侧或在上海华的右侧,然后调用旋转功能来旋转整个的UIView。但是,当我称之为,框架设置良好,但旋转完全破坏视图。

在我的布局子视图,我创建了一个标签和贝塞尔路径,每个如果标签不存在,才能创建和使用视图的边界属性的布局。

上午我打电话CGAffineTransformMakeRotation放错了地方?

- (void)updatePosition 
{ 
    // If the join overview orientates to north set position 
    if (self.joinOverview.doesOrientateToNorth) 
     // If the approach track is not south west place the north indicator in the lower left of the diagram 
     // if approach track is south west place north indicator in lower right 
     if (self.joinOverview.dataItem.approachTrack != VDApproachTrackSouthWest) 
      [self setFrame:CGRectMake(-self.superview.frame.origin.x, self.superview.frame.size.height - VIEW_SIZE, VIEW_SIZE, VIEW_SIZE)]; 
     else 
      [self setFrame:CGRectMake(self.superview.frame.size.width - VIEW_SIZE, self.superview.frame.size.height - VIEW_SIZE, VIEW_SIZE, VIEW_SIZE)]; 
    } 
    else // If the join overview orientates to the approach track set rotation and position 
    { 
     // Set the position to the lower left of the view 
     [self setFrame:CGRectMake(-self.superview.frame.origin.x, self.superview.frame.size.height - VIEW_SIZE, VIEW_SIZE, VIEW_SIZE)]; 

     // Rotate 
     self.transform = CGAffineTransformMakeRotation(DegreesToRadians(50)); 
    } 
} 


- (void)layoutSubviews 
{ 
    // Super 
    [super layoutSubviews]; 

    // set background colour to transparent 
    self.backgroundColor = [UIColor clearColor]; 

    if (!self.northSymbol) { 
    // Add 'N' symbol label 
    self.northSymbol = [[UILabel alloc]initWithFrame:CGRectMake(0, self.bounds.size.height/2, self.bounds.size.width, self.bounds.size.height/2)]; 
    [self.northSymbol setText:@"N"]; 
    [self.northSymbol setTextAlignment:NSTextAlignmentCenter]; 
    [self.northSymbol setFont:[UIFont boldSystemFontOfSize:18]]; 
    [self addSubview:self.northSymbol]; 

    self.arrow = [UIBezierPath bezierPathWithThreePointArrowFromPoint:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2) 
    toPoint:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/20) 
    headWidth:self.bounds.size.width/2.5]; 
    } 
} 

回答

0

要么你正在使用自动布局,不喜欢变换,或者你打电话updatePosition不止一次,因此你改变已经改变观点的frame,这将导致你很多的疼痛。添加

self.transform = CGAffineTransformIdentity; 

作为第一行updatePosition