ios - ¿Cómo agrego una UIview a un imageView mientras me aseguro de que los contenidos de UIView estén dentro de su marco?
swift ios8 (1)
Tengo una supervista que contiene un ImageView
, un testView
y algunos botones. UIView
un UIView
que contiene ImageView2
y un removebutton
. Cuando agrego UIView
a UIImageView
, los contenidos de UIView
no están en el marco de UIView
. Debido a eso, no puedo aplicar el reconocedor de gestos pan. He intentado aplicar restricciones y cambiar el marco y el centro de ImageView2
.
A continuación se muestra el código que estoy usando para crear el UIView
mencionado UIView
. ¿Cómo me UIView
que los contenidos de UIView
sean visibles en el marco de 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)
El problema es que líneas como esta no hacen lo que piensas:
let rect = CGRect(x: self.imageView.center.x-30, y: self.imageView.center.y-30, width: 80, height: 80)
// ... and ...
imageView2.center = testview.center
El center
de una vista está en frame
coordenadas de su frame
; tiene que ver con la forma en que se coloca la vista en su supervista . Pero la posición de una subvista debe describirse en términos de sus bounds
superviews, no su frame
. Sus bounds
son sus coordenadas internas , que es lo que quieres.
Tomemos el caso más simple: cómo centrar una subvista en una supervista. Esta no es la manera:
imageView2.center = testview.center
¿Ves el problema? testview.center
es donde testview
está ubicado en su superview ; no es el centro interno de la testview
, que es lo que quieres. El centro interno de la testview
viene de sus bounds
. Esta es la forma:
let c = CGPointMake(testview.bounds.midX, testview.bounds.midY)
imageView2.center = c