非常简单的问题:
我有一个ScrollView和一个ImageView。对于每个滚动的像素,ImageView应旋转一定的度数。
任何想法如何做到这一点? 提前致谢
答案 0 :(得分:1)
实施UIScrollViewDelegate
并使用仿射变换旋转。
#import <QuartzCore/QuartzCore.h>
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint offset = scrollView.contentOffset;
CGFloat rotateDegrees = offset.y;
CGFloat rotateRadians = rotateDegrees * (M_PI / 180);
_myImage.layer.affineTransform = CGAffineTransformMakeRotation(rotateRadians);
}
要重置循环,请使用_myImage.layer.affineTransform = CGAffineTransformIdentity
。
答案 1 :(得分:0)
为滚动视图指定delegate并实施-scrollViewDidScroll:
方法。每次滚动视图移动时都会调用此方法。在该方法中,获取滚动视图的contentOffset
,并将其与某个已保存的初始状态进行比较。这样可以获得滚动的像素数/点数。
计算出您想要将图像旋转多少,并使用CGAffineTransformMakeRotation
(docs)创建旋转变换,并将其指定给图像视图的transform
属性。
答案 2 :(得分:0)
垂直滚动和Swift 5:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let topOffset = scrollView.contentOffset.y
let angle = -topOffset * 2 * CGFloat(Double.pi / 180)
self.myImageView.transform = CGAffineTransform(rotationAngle: angle)
}
是的,不要忘记在viewDidLoad
中这样做:
self.scrollView.delegate = self