如何在确保 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?

我有一个包含 ImageViewtestView 和一些按钮的超级视图。我创建了一个 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)

问题是像这样的行不符合你的想法:

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.centertestview 在其父视图 中的位置 ;它不是 testview 内部 中心,这正是您想要的。 testview 的内部中心来自它的 bounds。是这样的:

let c = CGPointMake(testview.bounds.midX, testview.bounds.midY)
imageView2.center = c