无法看到数组中前 3 个视图控制器的 .transitionFlipFromRight 动画
Unable to see animation for .transitionFlipFromRight for first 3 view controllers in array
我有一个界面类似 Tinder 的应用程序,用户可以在其中浏览汽车
在我的ViewController.swift
中,我有
private var currentCardsOnScreen: [CardViewController] = []
当我将 CardViewController
s 放入堆栈时,这个数组被填充:
if !currentCardsOnScreen.map({ [=10=].id }).contains(vc.id) {
self.currentCardsOnScreen.append(vc)
}
滑动后项目会被删除:
if let index = currentCardsOnScreen.index(of: currentCard),
currentCardsOnScreen.map({ [=11=].id }).contains(currentCard.id) {
currentCardsOnScreen.remove(at: index)
}
当用户选择卡片时,我运行这样:
guard let currentCard = currentCard(index: index) else { return }
currentCard.flipCard()
调用此方法的方法:
func flipCard() {
guard
let frontOfCard = frontOfCard,
let backOfCard = backOfCard
else { return }
UIView.animate(withDuration: 0.32, delay: 0, options: .transitionFlipFromRight, animations: {
if self.frontIsShowing {
self.view.transform = CGAffineTransform(scaleX: 1, y: 1)
frontOfCard.alpha = 0
backOfCard.view.alpha = 1
} else {
self.view.transform = CGAffineTransform(scaleX: -1, y: 1)
frontOfCard.transform = CGAffineTransform(scaleX: -1, y: 1)
frontOfCard.alpha = 1
backOfCard.view.alpha = 0
}
self.frontIsShowing = !self.frontIsShowing
}, completion: nil)
堆叠中的卡片数量始终为 3。对于前 3 张卡片,点击卡片将改变 frontIsShowing
的值,但不会显示卡片翻转。如果我刷掉前 3 张,之后的任何卡片都会按预期运行。动画会显示,一切都会好的。
知道这里会发生什么吗?
编辑: 另外,不确定是否相关,但是在卡片 4 上制作第一个翻转动画时,我看到 alphas 过渡通过淡入淡出 in/fade但不是翻牌。第二次点击是我看到翻转动画的时候。同样,不确定是否相关但我想我会提到。
我想通了。我有一个 Alamofire 调用来获取大量阻止主线程动画的数据
在主线程上调用 flipCard() 并在后台线程上获取数据
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// fetch data in background thread
});
我有一个界面类似 Tinder 的应用程序,用户可以在其中浏览汽车
在我的ViewController.swift
中,我有
private var currentCardsOnScreen: [CardViewController] = []
当我将 CardViewController
s 放入堆栈时,这个数组被填充:
if !currentCardsOnScreen.map({ [=10=].id }).contains(vc.id) {
self.currentCardsOnScreen.append(vc)
}
滑动后项目会被删除:
if let index = currentCardsOnScreen.index(of: currentCard),
currentCardsOnScreen.map({ [=11=].id }).contains(currentCard.id) {
currentCardsOnScreen.remove(at: index)
}
当用户选择卡片时,我运行这样:
guard let currentCard = currentCard(index: index) else { return }
currentCard.flipCard()
调用此方法的方法:
func flipCard() {
guard
let frontOfCard = frontOfCard,
let backOfCard = backOfCard
else { return }
UIView.animate(withDuration: 0.32, delay: 0, options: .transitionFlipFromRight, animations: {
if self.frontIsShowing {
self.view.transform = CGAffineTransform(scaleX: 1, y: 1)
frontOfCard.alpha = 0
backOfCard.view.alpha = 1
} else {
self.view.transform = CGAffineTransform(scaleX: -1, y: 1)
frontOfCard.transform = CGAffineTransform(scaleX: -1, y: 1)
frontOfCard.alpha = 1
backOfCard.view.alpha = 0
}
self.frontIsShowing = !self.frontIsShowing
}, completion: nil)
堆叠中的卡片数量始终为 3。对于前 3 张卡片,点击卡片将改变 frontIsShowing
的值,但不会显示卡片翻转。如果我刷掉前 3 张,之后的任何卡片都会按预期运行。动画会显示,一切都会好的。
知道这里会发生什么吗?
编辑: 另外,不确定是否相关,但是在卡片 4 上制作第一个翻转动画时,我看到 alphas 过渡通过淡入淡出 in/fade但不是翻牌。第二次点击是我看到翻转动画的时候。同样,不确定是否相关但我想我会提到。
我想通了。我有一个 Alamofire 调用来获取大量阻止主线程动画的数据
在主线程上调用 flipCard() 并在后台线程上获取数据
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// fetch data in background thread
});