Iphone 方向更改后如何调整UIView的大小(代码包含似乎不起作用)

Iphone 方向更改后如何调整UIView的大小(代码包含似乎不起作用),iphone,ios,uiview,uiviewcontroller,uiinterfaceorientation,Iphone,Ios,Uiview,Uiviewcontroller,Uiinterfaceorientation,为什么这个UIView布局代码不能像我所希望的那样工作 背景: 我在UIViewController中有一个自定义UIView 自定义UIView具有时钟背景图像视图和小时和图像视图 在引入一些代码(见下文)尝试调整时针方向改变后,我被卡住了 下面的代码确实让事情变得一团糟——钟表手的边框轮廓与此代码相去甚远 任何关于我做错了什么的想法-很明显,我有一些假设或误解,认为它会像这样搞砸 UIViewController(在“didRotateFromInterfaceOrientation”方

为什么这个UIView布局代码不能像我所希望的那样工作

背景:

  • 我在UIViewController中有一个自定义UIView
  • 自定义UIView具有时钟背景图像视图和小时和图像视图
  • 在引入一些代码(见下文)尝试调整时针方向改变后,我被卡住了
  • 下面的代码确实让事情变得一团糟——钟表手的边框轮廓与此代码相去甚远
任何关于我做错了什么的想法-很明显,我有一些假设或误解,认为它会像这样搞砸

UIViewController(在“didRotateFromInterfaceOrientation”方法中)调用到我的自定义视图的代码:

// Centre image 
self.hourHandImageView.center = self.hourFaceUIImageView.center;

// Resize to cater for either Portrait or Landscape orientation
CGSize currSize = self.hourFaceUIImageView.frame.size;
float newHourHandImageheightWidth = currSize.width < currSize.height ? currSize.width : currSize.height;
CGSize newHourHandViewSize = CGSizeMake(newHourHandImageheightWidth, newHourHandImageheightWidth);
CGRect newRect = self.hourHandImageView.frame;
newRect.size = newHourHandViewSize;
self.hourHandImageView.frame = newRect;
//中心图像
self.hourHandImageView.center=self.hourFaceUIImageView.center;
//调整大小以适应纵向或横向方向
CGSize currSize=self.hourFaceUIImageView.frame.size;
float newHourHandImageheightWidth=currSize.width

注:如果没有“调整大小以适应纵向或横向方向”代码,时针将正确地保持在其应居中的位置(注意,我使用变换来将其旋转)。我真正需要做的就是在方向改变后适当调整时针的大小,注意横向模式下的小时背景图像较小。

首先,如何判断您是纵向还是横向?使用此(?):

然后在每个方法上,都应该为视图定义新的框架。首先从视图中删除自动调整大小,因为您将定义新的帧,并且您不希望这会干扰。您还可以定义如下一些度量:

#define hourHandImageViewPortrait CGPointMake(...,...)
#define hourHandImageViewLandScape CGPointMake(..., ...)

尺寸的变化是否得到反映?定位点是否位于错误的位置?是否尝试了[self.view layoutSubviews]或[self.view setNeedsDisplay]?请尝试设置需要显示以刷新视图。更改后在最后一次调用该方法frame@Ravin-中心出现在错误的位置,并且大小为incorrect@Rahul-刚刚尝试了这个,但似乎没有帮助-谢谢你的提示-我想这就是我在代码中尝试做的,即通过使用分配一个新的Rect来重置。但是,你不认为你能看出我所做的方法有什么问题吗?我有一种感觉,我可以使用您的提示,但我可能会在创建/分配新框架的方式中遇到同样的问题(乍一看,你的建议是错误的,原因有两个:1)你试图通过比较宽度和高度来确定你是处于纵向模式还是横向模式。2) 即使您希望使用视图的自动调整大小,但在这之后,您仍在尝试更改它们的帧。在我看来,这有点像火箭科学。。。
(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        [self reOrderToPortrait];
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
        [self reOrderToLandScape];
    }
}
#define hourHandImageViewPortrait CGPointMake(...,...)
#define hourHandImageViewLandScape CGPointMake(..., ...)