Я увеличиваю / уменьшаю размер ячейки представления коллекции при выборе. В ячейке есть подвиды, включая зеленую полосу, метку «vs» и два числовых текстовых поля. Как показано на гифке / ссылке ниже. Задача состоит в том, чтобы анимировать масштаб, а также анимировать масштаб подпредставлений, содержащихся в ячейке, и сохранить заданные ограничения макета. Что происходит, как показано на видео, заключается в том, что целевой макет переходит в конечный пункт назначения без анимации изменений. При первом нажатии ячейка «5vs0» хорошо масштабируется, но текстовое поле «0» перескакивает в крайнее правое положение без какой-либо анимации. При втором щелчке мышью, чтобы минимизировать масштаб, зеленая полоса слева немедленно изменяет размер до значения, равного текстовым полям 5 и 0. Это означает, что ограничения автоматической компоновки хорошо работают с представлением контейнера (ячейкой представления коллекции), когда оно масштабируется! Единственная проблема заключается в том, что ограничения макета не анимируются вместе с недействительным макетом представления коллекции.
Я установил файл xib без предупреждений или ошибок автоматического макета. Макет представления коллекции становится недействительным при щелчке по ячейке и вызове setCollectionViewLayout с анимацией, установленной на true. NB, после чего я вызываю центральную отправку в основную очередь, чтобы вызвать layoutIfNeeded для ячейки представления коллекции, которую нужно изменить. Похоже, это не влияет на анимацию макета в подпредставлениях. Что касается структуры, как написано в приведенном ниже коде, я веду словарь макетов, к которому я переключаюсь между выбором элемента ячейки.
Я мог бы вручную вызывать блоки анимации, чтобы изменить границы вложенных представлений, однако это довольно беспорядочно для разных размеров экрана iOS и т. Д.
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
var cell = collectionView.cellForItemAtIndexPath(indexPath) as! MatchEntryCell
if (collectionView.collectionViewLayout.isEqual(self.layouts[.Standard]!)){
collectionView.setCollectionViewLayout(self.layouts[.Edit]!, animated: true)
cell.homeScore!.userInteractionEnabled = true
cell.homeScore!.becomeFirstResponder()
picker.selectRow(cell.homeScore!.text.toInt()! , inComponent: 0, animated: true)
picker.selectRow(cell.awayScore!.text.toInt()! , inComponent: 1, animated: true)
} else if (collectionView.collectionViewLayout.isEqual(self.layouts[.Edit]!)) {
collectionView.setCollectionViewLayout(self.layouts[.Standard]!, animated: true)
cell.homeScore!.resignFirstResponder()
cell.homeScore!.userInteractionEnabled = false
}
dispatch_async(dispatch_get_main_queue()) {
UIView.animateWithDuration(0.5, animations: { () -> Void in
cell.layoutIfNeeded()
})
}
}
Я добавил маски автоизменения размеров с шириной и высотой, а также ниже для подвидов в моем подклассе UICollectionViewCell. Но без радости! Этот пост связан с этим решением, но я не испытываю радости! а>
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.borderWidth = 1
self.layer.cornerRadius = 10
self.layer.borderColor = UIColor.clearColor().CGColor
self.homeBar?.autoresizingMask = .FlexibleWidth | .FlexibleHeight
self.homeScore?.autoresizingMask = .FlexibleWidth | .FlexibleHeight
self.awayBar?.autoresizingMask = .FlexibleWidth | .FlexibleHeight
self.awayScore?.autoresizingMask = .FlexibleWidth | .FlexibleHeight
self.autoresizingMask = .FlexibleWidth | .FlexibleHeight
}
У кого-нибудь есть идеи или предложения? Ваше здоровье!