1. UIScrollViewDelegate
  2. LoginControllerDelegate
  3. transfrom frame with offset value
  4. UIVisualEffectView
  • UIScrollViewDelegate
  • contentOffset, CGRect
  • UIVisualEffectView()


The methods declared by the UIScrollViewDelegate protocol allow the adopting delegate to respond to messages from the UIScrollView class and thus respond to, and in some affect, operations such as scrolling, zooming, deceleration of scrolled content, and scrolling animations.

class UserDetailController: UIViewController, UIScrollViewDelegate {

먼저 UserDetailController에 UIScrollViewDelegate를 상속한다.

    lazy var scrollView: UIScrollView = {
        let sv = UIScrollView()
        sv.alwaysBounceVertical = true
        sv.contentInsetAdjustmentBehavior = .never
        sv.delegate = self
        return sv

그리고 사용하는 scrollView의 delegate를 self(UerDetailController)로 선언한다.

    sv.delegate = self

delegate를 지정해주고 scrollViewDidScroll()을 수정하여 사용할 수 있다.

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let changeY = -scrollView.contentOffset.y
        var width = view.frame.width + changeY * 2
//        print(-changeY)
        width = max(view.frame.width, width)
        imageView.frame = CGRect(x: min(-changeY, 0), y: min(-changeY, 0), width: width, height: width)

여기서 사진의 크기를 늘려주기 위해 scrollView.contentOffset.y을 가져옵니다. let changeY = -scrollView.contentOffset.y 는 아래로 드래그하면 양수값, 위로 드래그 하면 음수값이다.

-changeY 는 아래로 드래그하면 offset 값만큼 음수값, 위로 드래그하면 양수값입니다.

scrollView 내에서 (x, y)가 고정되는 것을 생각하자.

위로 드래그할 때에는 imageView.frame(x, y) 는 고정시키고 싶다. 따라서 좌표는 min값을 사용하여 음수값만 가지게 한다.(즉, 아래로 드래그 할 때에만 좌표값이 음수값의 offset 값이 더해진다.)

width를 기존 view.frame.width 에서 changeY만큼만 더하게 하면, 왼쪽으로 커지는 현상이 발생한다.

이는 좌표가 더 큰 값으로 변하기 때문이다.

        var width = view.frame.width + changeY * 2

이렇게 해주면 끗!

go to MoreInfoController with CardViewModel

When we tap more info button, we need to pass cardViewModel so that we could see the same images of users.

Each CardView has already a cardViewModel. All we need to do is pass if through delegate in HomeController. Because CardView is View, we can’t present MoreInfoController. That’s why we use protocol with delegate


An object that implements some complex visual effects.

we need an effect as a parameter.

let blurEffect = UIBlurEffect(style: .regular)
let visualEffectView = UIViusualEffectView(effect: blurEffect)

태그: ,