Анимация TableViewCell в swift
Я этой учебник и достичь этой анимации с помощью этого кода:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1)
UIView.animateWithDuration(0.25, animations: {
cell.layer.transform = CATransform3DMakeScale(1,1,1)
})
}
но я хочу обновить что-то в этой анимации ячейки, как при прокрутке в tableView ячейка маленькая, как (0.1,0.1,1)
в начале и после этого он Весы, как (1,1,1)
но я хочу применить как эффект типа пузыря, как он мал в начале после этого он приходит в исходном масштабе, как (1,1,1)
и один это зум, и снова он входит в свой первоначальный масштаб, как (1,1,1)
.
пожалуйста, руководство мне, как я могу достичь этой анимации?
EDIT:
Я пробовал это, но это не так гладко и не точно, что я хочу.
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1)
UIView.animateWithDuration(0.3, animations: {
cell.layer.transform = CATransform3DMakeScale(1,1,1)
})
UIView.animateWithDuration(1, animations: {
cell.layer.transform = CATransform3DMakeScale(2,2,2)
})
UIView.animateWithDuration(0.3, animations: {
cell.layer.transform = CATransform3DMakeScale(1,1,1)
})
}
5 ответов
то,что вам нужно, это простота задней анимации. Для получения дополнительной информации проверьтеhttp://easings.net
С помощью этой библиотеки можно создавать параметрические анимации https://github.com/jjackson26/JMJParametricAnimation/tree/master/JMJParametricAnimationDemo
на данный момент эффект, который вы пытаетесь сделать, можно грубо сделать, используя приведенный ниже код. Вы должны сделать анимацию масштабирования один за другим. Как вы сделали делает все анимации начнем вместе.
Добавление следующего анимационного кода в завершение блока запускает его после анимации. Вы можете дополнительно настроить тайминги, чтобы получить грубый эффект, который вам нужен.
cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1)
UIView.animateWithDuration(0.3, animations: {
cell.layer.transform = CATransform3DMakeScale(1.05,1.05,1)
},completion: { finished in
UIView.animateWithDuration(0.1, animations: {
cell.layer.transform = CATransform3DMakeScale(1,1,1)
})
})
Swift 4
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
UIView.animate(withDuration: 0.4) {
cell.transform = CGAffineTransform.identity
}
}
Swift 3 версия работает как шарм!
cell.layer.transform = CATransform3DMakeScale(0.1, 0.1, 1)
UIView.animate(withDuration: 0.3, animations: {
cell.layer.transform = CATransform3DMakeScale(1.05, 1.05, 1)
},completion: { finished in
UIView.animate(withDuration: 0.1, animations: {
cell.layer.transform = CATransform3DMakeScale(1, 1, 1)
})
})
используйте этот код, чтобы получить анимацию спиральных ячеек в tableview
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
//1. Setup the CATransform3D structure
var rotation = CATransform3DMakeRotation( CGFloat((90.0 * M_PI)/180), 0.0, 0.7, 0.4);
rotation.m34 = 1.0 / -600
//2. Define the initial state (Before the animation)
cell.layer.shadowOffset = CGSize(width: 10.0, height: 10.0)
cell.alpha = 0;
cell.layer.transform = rotation;
cell.layer.anchorPoint = CGPoint(x: 0.0, y: 0.5)
//3. Define the final state (After the animation) and commit the animation
cell.layer.transform = rotation
UIView.animate(withDuration: 0.8, animations:{cell.layer.transform = CATransform3DIdentity})
cell.alpha = 1
cell.layer.shadowOffset = CGSize(width: 0, height: 0)
UIView.commitAnimations()
}
используйте этот код для достижения анимации в tableview
func tableView(_ tableView: UITableView, willDisplay cell:
UITableViewCell, forRowAt indexPath: IndexPath) {
let rotationAngleInRadians = 360.0 * CGFloat(.pi/360.0)
// let rotationTransform = CATransform3DMakeRotation(rotationAngleInRadians, -500, 100, 0)
let rotationTransform = CATransform3DMakeRotation(rotationAngleInRadians, 0, 0, 1)
cell.layer.transform = rotationTransform
UIView.animate(withDuration: 1.0, animations: {cell.layer.transform = CATransform3DIdentity})
}