如何在没有IB的情况下控制对象的自动调整?

时间:2011-11-25 04:41:48

标签: ios ios5 custom-controls rotation autosize

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

    return YES;

}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

    [self positionViews];  

}


-(void)positionViews {

    UIInterfaceOrientation destOrientation = self.interfaceOrientation;
    if (destOrientation == UIInterfaceOrientationPortrait ||
        destOrientation == UIInterfaceOrientationPortraitUpsideDown) {

        [bLabel setFrame:CGRectMake(255, 10, 270, 60)];

    } else { 


        [bLabel setFrame:CGRectMake(377, 10, 270, 60)];

    }   
}

bLabel是Cutomed Object。

当IPad(设备)旋转时,bLable会旋转。 但出现时间滞后。 所以旋转运动不顺畅。

我的代码有什么缺点? 如何自然地控制对象的自动调整?

请告诉我你的建议。谢谢!!!

enter image description here

2 个答案:

答案 0 :(得分:6)

您在视图中查找的属性是autoresizingMask.Set就像在IB中一样。以下是可用的值:

UIViewAutoresizing
Specifies how a view is automatically resized.

enum {
   UIViewAutoresizingNone                 = 0,
   UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
   UIViewAutoresizingFlexibleWidth        = 1 << 1,
   UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
   UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
   UIViewAutoresizingFlexibleHeight       = 1 << 4,
   UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

例如,如果您想要灵活的宽度和高度以及固定边距,您可以这样做:

[myView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoResizingFlexibleWidth;][1]

答案 1 :(得分:2)

你可以:

  1. 设置你的UIView的autoresizingMask,如果可以的话 自动调整大小。

    bLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
    
  2. 如果两个设备方向之间的布局太不相同,您还可以在旋转动画期间调用的UIViewController方法willAnimateRotationToInterfaceOrientation:duration:中更改视图,而不是使用调用的didRotateFromInterfaceOrientation:在动画交易之后。

  3. 您在willAnimateRotationToInterfaceOrientation:duration:的视图'动画属性(frame,bounds,center,transform,alpha,backgroundColor,contentStretch)上调用的任何更改也将在轮播期间进行动画处理。< / p>