Как я могу автоматически закруглить края всплывающего окна? - PullRequest
0 голосов
/ 15 октября 2018

Я работаю над всплывающим окном для приложения, которое делаю.Если вы потратите секунду, чтобы посмотреть на изображение, прикрепленное ниже, вы увидите, что верхние края закруглены, а нижние - нет.Это потому, что я только закруглил края представления (это самый низкий уровень в иерархии).Я не могу скруглить края изображений (цветные рамки), потому что они представляют собой таблицы в режиме прокрутки.Единственное решение, о котором я могу подумать, - это очень уродливое решение, в котором я маскирую нижние края с помощью UIImageView, который появляется после исчезновения всплывающего окна. У кого-нибудь есть лучшее решение?Если так, я был бы очень признателен за вашу помощь.Кроме того, мое представление с прокруткой еще не работает, поэтому здесь нет ссылок, и решение (если оно работает) должно работать независимо.

Мой код:

allSeenPopover.layer.cornerRadius = 5
userProfile.layer.cornerRadius = 15
colorBackground.layer.cornerRadius = 15
colorBackground.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]

@IBAction func loadUserProfile(_ sender: Any) {

    if darken.alpha == 0 {

        darken.alpha = 1
        self.view.addSubview(userProfile)
        userProfile.center = self.view.center

        userProfile.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
        userProfile.alpha = 0

        UIView.animate(withDuration: 0.3) {
            self.largeDropShadow.alpha = 0.3
            self.userProfile.alpha = 1
            self.userProfile.transform = CGAffineTransform.identity
        }
    }

    else {
        UIView.animate(withDuration: 0.2, animations: {
            self.userProfile.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
            self.userProfile.alpha = 0
            self.darken.alpha = 0
            self.largeDropShadow.alpha = 0

        }) { (success:Bool) in
            self.userProfile.removeFromSuperview()
        }
    }
}

Изображение, на которое я ссылалсядо: image

1 Ответ

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

Поскольку представление, которое вы хотите округлить, находится внутри ячейки табличного представления, вы должны позаботиться о том, чтобы представление создавалось добавленным только один раз для повторно используемой ячейки.

Каждый раз, когда повторно используемая ячейка прокручивается в представление, проверьте, чтобы увидетьесли у него было подпредставление imageView (использование уникального тега в ячейке - это быстрый способ выполнить эту проверку).Если у вас его нет, создайте его, а затем настройте его для конкретной строки, в противном случае просто настройте его для конкретной строки ...

(предупреждение, я не очень бегло говорю, но идея должнабудь ясен)

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell!

    let imageView:UIImageView = cell.viewWithTag(99) as? UIImageView
    if (!imageView) {
        // this code runs just once per reused cell, so setup
        // imageView properties here that are row-independent
        imageView = UIImageView()
        imageView.tag = 99  // so we'll find this when the cell gets reused
        imageView.layer.cornerRadius = 15.0
        imageView.clipsToBounds = true
        // any other props that are the same for all rows
        imageView.frame = // your framing code here
        cell.addSubview(imageView)
    }
    // this code runs each time a row scrolls into view
    // so setup properties here that are row-dependent
    imageView.image = // some function of indexPath.row

    return cell
}
...