Подтвердить что ты не робот

Как получить раму вида внутри другого вида?

У меня есть UIImageView в self.view (основной вид), а внутри него есть UIButton. Я хочу знать, что кадр UIButton в self.view не в UIImageView.

4b9b3361

Ответ 1

Я думаю, вы ищете этот метод

- convertRect: toView:

// Swift
let frame = imageView.convert(button.frame, to: self.view)

// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];

Ответ 2

Существует четыре метода UIView, которые могут помочь вам преобразовать CGPoints и CGRects из одной ссылки на UIView в другую:

– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:

чтобы вы могли попробовать

CGRect f = [imageView convertRect:button.frame toView:self.view];

или

CGRect f = [self.view convertRect:button.frame fromView:imageView];

Ответ 3

Swift 3

Вы можете преобразовать рамку кнопки в систему координат вида с помощью этого:

self.view.convert(myButton.frame, from: myButton.superview)


Обязательно поместите свою логику внутри viewDidLayoutSubviews, а не viewDidLoad. Операции, связанные с геометриями, должны выполняться после того, как выложены надстройки, иначе они могут не работать должным образом.

class ViewController: UIViewController {

    @IBOutlet weak var myImageView: UIImageView!
    @IBOutlet weak var myButton: UIButton!

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let buttonFrame = self.view.convert(myButton.frame, from: myButton.superview)
    }
}

Вы можете просто ссылаться на myButton.superview вместо myImageView при преобразовании фрейма.


Здесь представлено больше вариантов преобразования CGPoint или CGRect.

self.view.convert(point: CGPoint, from: UICoordinateSpace)
self.view.convert(point: CGPoint, from: UIView)             
self.view.convert(rect: CGRect, from: UICoordinateSpace)
self.view.convert(rect: CGRect, from: UIView)

self.view.convert(point: CGPoint, to: UICoordinateSpace)
self.view.convert(point: CGPoint, to: UIView)
self.view.convert(rect: CGRect, to: UICoordinateSpace)
self.view.convert(rect: CGRect, to: UIView)

Подробнее о конвертации CGPoint или CGRect см. в Документах разработчика Apple.

Ответ 4

Что-то вроде этого? может быть совершенно неправильным, dont действительно подумать, p

CGRect frame = CGRectMake((self.view.frame.origin.x-imageview.frame.origin.x) +btn.frame.origin.x,
                          (self.view.frame.origin.y.imageview.frame.origin.y)+btn.frame.origin.y,
                          btn.frame.size.width,
                          btn.frame.size.height);

Я не знаю, есть ли более простой способ.