ios swift uiview ios8 addsubview

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