2016-10-06 5 views
4

첫 번째 맞춤 맞춤 애니메이션을 만들고 있습니다. 내가 원하는 것은 행을 선택했을 때 옆에서 밀어 넣는 대신 선택한 행에서 펼쳐지는 목록 뷰를 갖는 것입니다. 뭔가 같은 : 맞춤형 긴급 애니메이션 재생 문제 표시

enter image description here

그래서 사용자가 새로운 컨트롤러가 녹색 행 크기에서 시작 화면을 채우기 위해 확장됩니다 녹색 행을 선택합니다. 이 부분은 지금까지 잘 작동했습니다.

내가 겪고있는 문제는 반대쪽을 시도하는 긴장 풀리는 부분과 전체 화면을 원래 행으로 축소 한 다음 닫을 때의 문제입니다. 발생하는 상황은 잘게 축소되지만 노출 된 영역은 검은 색으로 유지되고 애니메이션이 완료되면 갑자기 깜박입니다. 무엇 수배은이 같은 것입니다 :

enter image description here

그러나 일어나고있는 것이 더 같이있다 :

enter image description here

내가 언 와인드의 perform을 위해 사용하고 코드는 외모와 같은 :

class FromScheduleFocusSegue: UIStoryboardSegue { 
    override func perform() { 
     let fromView = self.source.view! 
     let toView = self.destination.view! 
     let window = UIApplication.shared.keyWindow! 
     let schedulesList = self.destination as! SchedulesListController 
     let cell = schedulesList.tableView.cellForRow(at: schedulesList.tableView.indexPathForSelectedRow!)! 
     var stripe = cell.bounds 
     stripe.size.height = 60 
     let targetFrame = cell.convert(stripe, to: window).insetBy(dx: 0, dy: 0) 
     schedulesList.tableView.selectRow(at: nil, animated: false, scrollPosition: .none) 
     UIView.animateWithDuration(4000.milliseconds, delay: 0.seconds, options: .curveEaseInOut, animations: { 
      fromView.frame = targetFrame 
     }) { (finished) in 
      self.source.dismiss(animated: false, completion: nil) 
     } 
    } 
} 

그래서 기본적으로, 내가보기에는 애니메이션으로 표시 되려고합니다. ation이 일어나고 있습니까? 완성도를 위해서

는, 여기에 앞으로 SEGUE 코드입니다 :

class ToScheduleFocusSegue: UIStoryboardSegue { 
    override func perform() { 
     let fromView = self.source.view! 
     let toView = self.destination.view! 
     let window = UIApplication.shared.keyWindow! 
     let box = UIScreen.main.bounds 
     let schedulesList = self.source as! SchedulesListController 
     let cell = schedulesList.tableView.cellForRow(at: schedulesList.tableView.indexPathForSelectedRow!)! 
     toView.frame = cell.convert(cell.bounds, to: window).insetBy(dx: 0, dy: 0) 
     window.insertSubview(toView, aboveSubview: fromView) 
     UIView.animateWithDuration(4000.milliseconds, delay: 0.seconds, options: .curveEaseInOut, animations: { 
      toView.frame = box 
      }) { (finished) in 
       self.source.present(self.destination, animated: false, completion: nil) 
     } 
    } 
} 

+0

당신은 사용자 정의 전환을 대신 사용해야합니다./UIPresentationController 및 패밀리. – Andy

+0

내가 원하는 것을 시각적으로 만들어주기 위해 올바른 방향으로 나아갈 수있는 예를 보여줄 수 있다면, 현상금은 너의 것이다. –

+0

나는 UICollectionView를 더 자세히 살펴볼 것이다. 예를 들어, "일반 화면 전환을위한 콜렉션 뷰 레이아웃 애니메이션"섹션을 참조하십시오. https://www.objc.io/issues/12-animations/collectionview-animations/ –

답변

0

을 수행합니다 뷰 컨트롤러를 가지고 시도 (이 iOS10가 Swift3를 사용하여 대상, XCode8에) 프레젠테이션도 기각 않습니다 . 당신의 언 와인드 SEGUE에

그래서 :

UIView.animateWithDuration(4000.milliseconds, delay: 0.seconds, options: .curveEaseInOut, animations: { 
     fromView.frame = targetFrame 
    }) { (finished) in 
     self.destination.dismiss(animated: false, completion: nil) // the destination is the one that presented the current view 
    } 
+0

아무런 차이가 없습니다. 나는 놀랍고, 뭔가 달라 지거나 오류가 있거나 다른 차이가있을 것이라고 예상 했었지만 시각적 인 행동은 같았고 콘솔 출력에는 차이가 없었습니다. –