我已经创建了一个UICollectionView,并希望所有的单元格都像iPhone上跳板的编辑模式一样摇动。我有自定义的单元格,所以我假设它会放在其中,但不知道它是如何实现的。谢谢。
#define degreesToRadians(x) (M_PI * (x) / 180.0)
#define kAnimationRotateDeg 0.5
#define kAnimationTranslateX 1.0
#define kAnimationTranslateY 1.0
//startJiggling
int count = 1;
CGAffineTransform leftWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? +1 : -1 ) ));
CGAffineTransform rightWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? -1 : +1 ) ));
CGAffineTransform moveTransform = CGAffineTransformTranslate(rightWobble, -kAnimationTranslateX, -kAnimationTranslateY);
CGAffineTransform conCatTransform = CGAffineTransformConcat(rightWobble, moveTransform);
self.transform = leftWobble; // starting point
[UIView animateWithDuration:0.1
delay:(count * 0.08)
options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
animations:^{ self.transform = conCatTransform; }
completion:nil];
发布于 2012-12-25 06:43:34
如果您将代码放在自定义单元格中名为startJiggling
的方法中,则可以在控制器中调用此方法:
[self.collectionView.visibleCells makeObjectsPerformSelector:@selector(startJiggling)];
这确保了所有可见的单元格都将开始抖动。
然后,我还设置了一些标志,指示您的单元格应该抖动并在collectionView:cellForItemAtIndexPath:
中进行测试。如果是,那么调用你的方法。
发布于 2019-05-30 22:58:35
像这样简单的Swift 5
在你的UICollectionViewCell中输入这两个函数,并在你想要动画/停止的时候调用它,例如: cell render
func shake() {
let shakeAnimation = CABasicAnimation(keyPath: "transform.rotation")
shakeAnimation.duration = 0.05
shakeAnimation.repeatCount = 2
shakeAnimation.autoreverses = true
let startAngle: Float = (-2) * 3.14159/180
let stopAngle = -startAngle
shakeAnimation.fromValue = NSNumber(value: startAngle as Float)
shakeAnimation.toValue = NSNumber(value: 3 * stopAngle as Float)
shakeAnimation.autoreverses = true
shakeAnimation.duration = 0.15
shakeAnimation.repeatCount = 10000
shakeAnimation.timeOffset = 290 * drand48()
let layer: CALayer = self.layer
layer.add(shakeAnimation, forKey:"shaking")
}
func stopShaking() {
let layer: CALayer = self.layer
layer.removeAnimation(forKey: "shaking")
}
发布于 2015-11-06 05:54:59
如果任何人对如何在Swift 2.0中做到这一点感到好奇,下面应该是一个很好的起点。
let animationRotateDegres: CGFloat = 0.5
let animationTranslateX: CGFloat = 1.0
let animationTranslateY: CGFloat = 1.0
let count: Int = 1
func wobble() {
let leftOrRight: CGFloat = (count % 2 == 0 ? 1 : -1)
let rightOrLeft: CGFloat = (count % 2 == 0 ? -1 : 1)
let leftWobble: CGAffineTransform = CGAffineTransformMakeRotation(degreesToRadians(animationRotateDegres * leftOrRight))
let rightWobble: CGAffineTransform = CGAffineTransformMakeRotation(degreesToRadians(animationRotateDegres * rightOrLeft))
let moveTransform: CGAffineTransform = CGAffineTransformTranslate(leftWobble, -animationTranslateX, -animationTranslateY)
let conCatTransform: CGAffineTransform = CGAffineTransformConcat(leftWobble, moveTransform)
transform = rightWobble // starting point
UIView.animateWithDuration(0.1, delay: 0.08, options: [.AllowUserInteraction, .Repeat, .Autoreverse], animations: { () -> Void in
self.transform = conCatTransform
}, completion: nil)
}
func degreesToRadians(x: CGFloat) -> CGFloat {
return CGFloat(M_PI) * x / 180.0
}
当我想让我的细胞摆动时,我这样做:
for cell in collectionView.visibleCells() {
let customCell: MyCustomCell = cell as! MyCustomCell
customCell.wobble()
}
https://stackoverflow.com/questions/14025600
复制相似问题