2017-01-11 1 views
0

다른 2 개의 뷰 (하나의 뷰는 화면의 1/4, 다른 하나는 화면의 3/4를 차지하는 뷰)의 컨테이너 역할을하는 뷰를가집니다. 내가 원했던 것은 사용자가 테이블 뷰를 위로 (스 와이프 방향) 스크롤하면 테이블 뷰가 부드럽게 위로 올라가고 (사용자가 방향을 아래로 내릴 때) 아래로 내려갈 때입니다.사용자가 테이블 뷰에서 스크롤 할 때 컨투어 변화를 애니메이션으로 처리합니다.

지금까지 나는 tableview가 올라가도록 관리했지만 너무 갑작스럽고 내려갈 수는 없습니다. 여기 내가 그것을 어떻게 위로 아래로보기 퍼팅과

문제있는 ScrollView 때문 : viewViewTopConstraint 컨테이너 상위 제약

extension StatsOverlayViewController: UIScrollViewDelegate { 
func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView == statsTableView { 
     let scrolledOffset = scrollView.contentOffset.y 

     while viewViewTopConstraint.constant > 0 && viewViewTopConstraint.constant < 69 { 
      print("scrolling with offset\(scrollView.contentOffset.y)") 
       self.viewViewTopConstraint.constant -= scrolledOffset 
     } 
    } 
} 

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    if scrollView == statsTableView { 
     if viewViewTopConstraint.constant < 0 { 
      viewViewTopConstraint.constant = 0 
     } else if viewViewTopConstraint.constant > 69 { 
      viewViewTopConstraint.constant = 69 
     } 
    } 
} 

}

이 편집에있는 tableview 상단 제약이다. 반송 = true로 작동하는 동안 루프 코드의 잘못된 사용은 다음과 같습니다

 func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView == statsTableView { 
     let scrolledOffset = scrollView.contentOffset.y 
     UIView.animateWithDuration(0.2, animations: { 
      if scrolledOffset > 0 { 
       self.viewViewTopConstraint.constant = 0 
      } else { 
       self.viewViewTopConstraint.constant = self.viewViewTopConstraintOriginalValues 
      } 
      self.view.layoutIfNeeded() 
     }) 
    } 
} 

답변

1

당신은

UIView.animate(withDuration: 1) { 
    self.view.layoutIfNeeded 
} 

당신이 당신의 제약 조건을 변경 직후에이 코드를 추가 self.view.layoutIfNeeded 블록 UIView.animate 내에서 호출해야합니다. 애니메이션을 조금 더 세부적으로 제어하려면이 코드를 사용하십시오.

UIView.animate(withDuration: 1, delay: 0, options: [.curveEaseInOut], animations: { 
    self.view.layoutIfNeeded 
}, completion: nil) 
+1

애니메이션 블록 자체 내에서 제약 조건 변경을 호출하는 것이 가장 좋지 않습니까? – Pierce

+0

덕분에 애니메이션이 좀 더 멋지지만 스크롤 다운 문제는 여전히 해결되지 않습니다 – John

+0

@Pierce 제약 조건을 변경 한 후에도 layout은 layoutIfNeeded가 호출 될 때만 업데이트되므로 생각하지 않습니다 많은 차이를 만든다. 제약 조건의 상수 값을 변경하면 'layoutIfNeeded'가 호출되어 변경 사항이 애니메이션으로 표시되지 않습니다. – ebby94

관련 문제