如何在确保 UIView 的内容在其框架内的同时将 UIview 添加到 imageView?
Posted
技术标签:
【中文标题】如何在确保 UIView 的内容在其框架内的同时将 UIview 添加到 imageView?【英文标题】:How do I add a UIview to an imageView while ensuring that the contents of the UIView are inside the it's frame? 【发布时间】:2015-05-08 15:04:08 【问题描述】:我有一个包含ImageView
、testView
和一些按钮的超级视图。我创建了一个UIView
,其中包含ImageView2
和一个removebutton
。
当我将UIView
添加到UIImageView
时,UIView
的内容不在UIView
的框架内。因此,我无法应用平移手势识别器。
我尝试应用约束并更改 ImageView2
的框架和中心。
下面是我用来创建上述UIView
的代码。如何确保UIView
的内容在UIView
的框架中可见?
let rect = CGRect(x: self.imageView.center.x-30, y: self.imageView.center.y-30, width: 80, height: 80)
testview = UIView(frame: rect)
testview.layer.cornerRadius = testview.frame.width/2
testview.backgroundColor = UIColor.blackColor()
testview.clipsToBounds = true
imageView2 = UIImageView(frame: CGRect(x: testview.frame.minX+10, y: testview.frame.minY+10, width: 60, height: 60))
let rect2 = CGRect(x: self.testview.frame.maxX-17, y: self.testview.frame.minY, width: 20, height: 20)
removeButton = UIButton(frame: rect2)
removeButton.layer.cornerRadius = removeButton.frame.width/2
removeButton.backgroundColor = UIColor.blackColor()
removeButton.clipsToBounds = true
imageView2.layer.cornerRadius = imageView2.frame.width/2
imageView2.userInteractionEnabled = true
imageView2.clipsToBounds = true
testview.alpha = 0.3
imageView2.center = testview.center
imageView2.center = testview.center
testview.addSubview(imageView2)
testview.addSubview(removeButton)
testview.bringSubviewToFront(imageView2)
imageView.addSubview(testview)
【问题讨论】:
"UIView 的内容不在 UIView 的框架内" 不明白是什么意思。能否请您解释一下出了什么问题,更清楚一点? uiview 的子视图(imageView)在 uiview 的框架/边界之外。例如,如果 ui 视图的框架为 x:0,y:0,width : 80 ,height: 80 那么 imageview 位于 x:200,y:200:width :60 height: 60 你了解frame和bounds的区别吗? 感谢马特为我指明了正确的方向:)。你能帮忙做一件事吗,即我有选择 hidesBottomBarWhen Pushed(in storyboard) 这会从视图中删除标签栏,但是当视图出现时它会通过动画来做到这一点。我不想要那个动画,有没有办法在 viewDidLoad 方法中做到这一点。 【参考方案1】:问题是这样的行并不像你想的那样:
let rect = CGRect(x: self.imageView.center.x-30, y: self.imageView.center.y-30, width: 80, height: 80)
// ... and ...
imageView2.center = testview.center
视图的center
位于其frame
坐标中 - 它与视图在其父视图中的放置方式有关。但是子视图的位置必须根据它的父视图bounds
来描述,而不是它的frame
。它的bounds
是它的内部坐标,这就是你想要的。
让我们以最简单的情况为例:如何在父视图中居中子视图。这不是办法:
imageView2.center = testview.center
你看到问题了吗? testview.center
是 testview
在其父视图中的位置;它不是testview
的internal 中心,这正是你想要的。 testview
的内部中心来自它的bounds
。方法是这样的:
let c = CGPointMake(testview.bounds.midX, testview.bounds.midY)
imageView2.center = c
【讨论】:
以上是关于如何在确保 UIView 的内容在其框架内的同时将 UIview 添加到 imageView?的主要内容,如果未能解决你的问题,请参考以下文章