GradientView в верхней части ImageView находится в неправильном положении - PullRequest
0 голосов
/ 28 февраля 2020

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

Код здесь:

private func setupCell(){
      let gradientView = UIView(frame: CGRect(x: 0, y:  self.frame.height / 4 , width: self.frame.width, height: self.frame.height / 2) )
      print("gradientView x: \(gradientView.frame.origin.x), gradientView y: \(gradientView.frame.origin.y)")
      print("gradientView width \(gradientView.frame.width), gradientView height \(gradientView.frame.height)")

      gradientView.layer.cornerRadius = 20
      let gradient = CAGradientLayer()
      gradient.frame = gradientView.frame
      gradient.colors = [UIColor.clear, UIColor.black.cgColor]

      gradientView.layer.insertSublayer(gradient, at: 0)

      contentView.addSubview(self.imageView)
      self.imageView.addSubview(gradientView)
      contentView.addSubview(titleLabel)




      NSLayoutConstraint.activate([
          imageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
          imageView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
          imageView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.9),
          imageView.heightAnchor.constraint(equalTo: contentView.heightAnchor, multiplier: 1),

          titleLabel.leadingAnchor.constraint(equalTo: imageView.leadingAnchor, constant: 10),
          titleLabel.bottomAnchor.constraint(equalTo: imageView.bottomAnchor),
          titleLabel.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
          titleLabel.heightAnchor.constraint(equalToConstant: 50)
      ])

        print("contentView x: \(contentView.frame.origin.x), contentView y: \(contentView.frame.origin.y)")
        print("contentView width: \(contentView.frame.width), contentView height: \(contentView.frame.height)")

    }

Пожалуйста, смотрите фотографии для лучшего понимания.

Случай 1:

let gradientView = UIView(frame: CGRect(x: 0, y: self.frame.height / 4 , width: self.frame.width, height: self.frame.height / 2) )

Хорошо, это ожидаемый эффект, градиент начинается от 80 и снижается до 160.

Консоль ouptput:

gradientView x: 0.0, gradientView y: 40.0
gradientView width 320.0, gradientView height 80.0
contentView x: 0.0, contentView y: 0.0
contentView width: 320.0, contentView height: 160.0

enter image description here

Но в этом случае я думаю, что вывод должен быть таким, как показано на рисунке ниже, как origin.x = 40 и height = 80, так что доходит до дна равного 120. В чем проблема?

enter image description here

Случай 2:

Измените его на CGRect(x: 0, y: self.frame.height / 2, после запуска на iPhone эффект градиента исчезнет.

...