当后者在X轴上滚动时,我在Y轴上的滚动视图内移动子视图时遇到了一个问题。
如何在X轴上滚动UIScrollView
时,可靠地将子视图的Y轴更改为某个点?
进一步澄清:
我有一个分页的UIScrollView,当下一页的50%可见时会自动转到下一页。
现在,我要做的是将图像从视图中心(它居中)移动,在Y轴上移动到视图顶部,直到它到达Y点原点40点,同时滚动scrollview(superview)水平。
当我水平滚动scrollView时,图像的Y原点(或中间Y,因为它写在下面的代码中)会减少到某一点(在我的情况下是40点)并且保持在那里而我是滚动浏览其他页面。
现在我正在使用scrollview的contentOffset.x
来计算子视图的Y轴,但是我从contentOffset.x
得到的值是不可靠的,因为该属性大部分时间都在跳过值。滚动到右scrollView.contentOffset.x * 1.34
时我还必须使用补偿值,我真的不想手动计算(我希望图像停在origin.y = 40
);
我在scrollViewDidScroll
内使用的代码:
CGPoint headerImageCenter = self.logo.center;
if (scrollView.contentOffset.x < 0) {
// We're scrolling right, move image back to center.x and make a bounce effect
headerImageCenter.y = self.view.center.y - (scrollView.contentOffset.x / 3);
headerImageCenter.x = self.view.center.x + scrollView.contentOffset.x;
} else {
// We're scrolling left, move image to top
if (self.pageControl.currentPage == 0) {
headerImageCenter.y = self.view.center.y - (scrollView.contentOffset.x * 1.34);
}
headerImageCenter.x = self.view.center.x + scrollView.contentOffset.x;
}
self.logo.center = headerImageCenter;
我正在尝试从Flickr的应用程序重现以下动画,其中徽标位于顶部并在滚动时保持在那里: http://goo.gl/JSLDTq
我非常感谢任何帮助!谢谢!
答案 0 :(得分:0)
如果您想要一些建议,只需尝试此解决方案的动画
将“flikerLabel”作为self.view的子视图而不是scrollview,并在索引移动到1时设置动画
[UIView animateWithDuration:0.5f animations:^(void){
flikerLabel.rect = CGRectMake(200,100,100,50);
//change font size if you want it will automatic do animation like gif
}];
答案 1 :(得分:0)
首先,我建议不要将self.logo作为scrollview的子视图,因此您不需要弄乱x坐标。 然后我发现更容易计算放置的某个百分比值,即
CGFloat percentage = scrollView.contentOffset.x/scrollView.bounds.size.width;
percentage = MAX(0, MIN(1, percentage)); // Limit percentage in this case, but calculating it different and not limiting could give you interesting bounce effects
只需根据百分比计算您的观看中心:
CGFloat startY = CGRectGetMidY(self.view.bounds);
CGFloat targetY = 40;
CGFloat currentY = startY*(1 - percentage) + targetY*percentage;
我怀疑scrollViewDidScroll中的值对于这种情况不够可靠。但你可以看一下https://developer.apple.com/library/ios/samplecode/StreetScroller/他们是UIScrollView的子类,并使用layoutSubviews定位事物。