加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何在旋转时动态地将UIButton重新定位为UIImage

发布时间:2020-12-14 19:06:57 所属栏目:百科 来源:网络整理
导读:我正在开发一款iPad应用程序,可让您在智能房屋的原型中控制不同的东西.例如,它可以让你打开和关闭灯.为此,我制作了一个UI ImageView,显示了房子的平面图,并添加了UIButtons作为每个可以切换的灯的子视图. 如您所见,使用每个UIButton的setFrame方法将按钮完美
我正在开发一款iPad应用程序,可让您在智能房屋的原型中控制不同的东西.例如,它可以让你打开和关闭灯.为此,我制作了一个UI ImageView,显示了房子的平面图,并添加了UIButtons作为每个可以切换的灯的子视图.

如您所见,使用每个UIButton的setFrame方法将按钮完美地放置在平面图上.但是,当我将iPad旋转到纵向时,会发生以下情况:

按钮显然仍然具有相同的原点,但它与图像的重新定位无关.

平面图图像具有以下设置的支柱和弹簧:

并将其内容模式设置为Aspect Fit.

我的问题是

如何动态重新定位每个UIButton,使其具有相同的相对位置.我想我必须在{did / should} AutorotateToInterfaceOrientation委托方法中处理这个问题.

应该注意的是UIImageView是可缩放的并且为了解决这个问题,我已经实现了scrollViewDidZoom委托方法,如下所示:

for (UIView *button in _floorPlanImage.subviews) {       
    CGRect oldFrame = button.frame;
    [button.layer setAnchorPoint:CGPointMake(0.5,1)];
    button.frame = oldFrame;
    button.transform = CGAffineTransformMakeScale(1.0/scrollView.zoomScale,1.0/scrollView.zoomScale);
}

先感谢您!

解决方法

我发现布局子视图的最佳方法是 – (void)layoutSubviews方法.您必须继承UIImageView并重写该方法.

每当您的帧更改时,此方法将自动被调用,并且在第一次显示视图时也会调用此方法.

如果将所有布局代码放在此方法中,它会阻止布局碎片和重复,将视图代码保留在视图中,并且大多数情况下默认情况下都可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读