Как получить фрейм UIBarButtonItem относительно UIWindow в Swift? - PullRequest
0 голосов
/ 09 октября 2018

Я прошел много SO сообщений на эту тему.Но у меня другое требование.

Я работаю над страницей Пошаговое руководство для приложения в моем приложении, для которой я хотел бы отобразить некоторые подсказки для некоторых объектов пользовательского интерфейса.Я хотел бы разместить UIView над всей страницей, чтобы размыть его, а затем отобразить выделенное изображение и текст подсказки.По этой причине мне нужен кадр этих объектов (для которых требуется помощь) относительно окна UIWindow, чтобы я мог поместить другое подсвеченное изображение точно над ними.Я нашел фрейм пары объектов внутри заголовка табличного представления со следующим кодом.

//Hint for expand/collapse arrow
guard let deviceHeaderView: StatusSectionView = tblStatus.headerView(forSection: 0) as? StatusSectionView else {
    //Hide expand/collapse hint objects
}

if let imgExpandCollapseFrame = deviceHeaderView.imgExpandCollapse.superview?.convert(deviceHeaderView.imgExpandCollapse.frame, to: window) {
    print("Frame of imgExpandCollapse.. \(imgExpandCollapseFrame)")

    let xPosition = (imgExpandCollapseFrame.origin.x + (imgExpandCollapseFrame.size.width/2)) - appWalkthroughView.downArrowHintImgView.frame.size.width/2

    let yPosition = (imgExpandCollapseFrame.origin.y + (imgExpandCollapseFrame.size.height/2)) - appWalkthroughView.downArrowHintImgView.frame.size.height/2

    appWalkthroughView.downArrowHintImgView.frame = CGRect(x: xPosition,
                                                           y: yPosition,
                                                           width: appWalkthroughView.downArrowHintImgView.frame.size.width,
                                                           height: appWalkthroughView.downArrowHintImgView.frame.size.height)
}

Точно так же мне нужно найти фрейм UIBarButtonItem и преобразовать его фрейм относительно UIWindow.и отобразить изображение подсказки над ним.

Для этого я нашел кадр UIBarButtonItem следующим образом:

let leftBarButtonItem = self.navigationItem.leftBarButtonItem!

if let leftBarButtonItemView = leftBarButtonItem.value(forKey: "view") as? UIView {
    print(leftBarButtonItemView.frame)
}

Этот код просто задает границы элемента панели кнопок, как этот.

(0.0, 0.0, 36.0, 44.0)

И я не смог преобразовать его кадр относительно UIWindow.Как мы можем достичь этого?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018
let leftBarButtonItem = self.navigationItem.leftBarButtonItem
        if let leftBarButtonItemView = leftBarButtonItem?.value(forKey: "view") as? UIView {
            //You should ask your window to convert your frame to his frames.
            if let rect = UIApplication.shared.keyWindow?.convert(leftBarButtonItemView.frame, from: nil) {

            }
        }
0 голосов
/ 09 октября 2018

Вы можете попросить, чтобы представление сделало преобразование для вас:

let frameInWindow = leftBarButtonItemView.convert(leftBarButtonItemView.bounds, to: nil)

(преобразование будет использовать систему координат вдовы, если целевое представление - ноль)

...