如何在确保 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?
我有一个包含 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)
问题是像这样的行不符合你的想法:
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
的 内部 中心,这正是您想要的。 testview
的内部中心来自它的 bounds
。是这样的:
let c = CGPointMake(testview.bounds.midX, testview.bounds.midY)
imageView2.center = c
我有一个包含 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)
问题是像这样的行不符合你的想法:
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
的 内部 中心,这正是您想要的。 testview
的内部中心来自它的 bounds
。是这样的:
let c = CGPointMake(testview.bounds.midX, testview.bounds.midY)
imageView2.center = c