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