我正在尝试在我的应用中添加类似Instagram的动画,最小化标题“Instagram”并将显示移动到整个页面。
在我的应用程序中,我有两个UILabel - chapterNameNumberLabel和chapterNameLabels以及一个UITextView。在UITextView中滚动时,我希望chapterNameNumberLabel和chapterNameLabels最小化,并且整个页面要用UITextView内容填充。
我尝试过以下内容:(使用答案中提到的指针Finding the direction of scrolling in a UIScrollView?
在viewDidLoad()
:
xLabel = self.chapNameNumberLabel.center.x;
yLabel = self.chapNameNumberLabel.center.y;
widthLabel = self.chapNameNumberLabel.frame.width;
heightLabel = self.chapNameNumberLabel.frame.height;
xNameLabel = self.chapterNameLabel.center.x;
yNameLabel = self.chapterNameLabel.center.y;
widthNameLabel = self.chapterNameLabel.frame.width;
heightNameLabel = self.chapterNameLabel.frame.height;
并调用以下方法:
func scrollViewDidScroll(scrollView: UIScrollView) {
if(self.lastContentOffset > 0 ){
if (self.lastContentOffset > scrollView.contentOffset.y) {
//print("Up");
UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
self.chapNameNumberLabel.frame = CGRectMake(self.xLabel - 100, self.yLabel - 10, self.widthLabel, self.heightLabel);
self.chapterNameLabel.frame = CGRectMake(self.xNameLabel - 140, self.yNameLabel - 10 , self.widthNameLabel, self.heightNameLabel);
}, completion: nil)
}
else if (self.lastContentOffset < scrollView.contentOffset.y){
print("Down");
UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.chapNameNumberLabel.frame = CGRectMake( 100 , -10, 5, 5);
self.chapterNameLabel.frame = CGRectMake(50, -10, 5, 5);
}, completion: nil);
}
}
// update the new position acquired
self.lastContentOffset = scrollView.contentOffset.y
}
动画没问题,但我面临的问题是:
我无法在标签上获得'字体大小最小化'效果。我的应用程序中的标签只是消失而不减小字体大小。什么样的动画类型应该用于在滚动时实现这种字体大小最小化?
此外,我在向下滚动时设置的值(在scrollViewDidScroll中)是
self.chapNameNumberLabel.frame = CGRectMake( 100 , -10, 5, 5);
self.chapterNameLabel.frame = CGRectMake(50, -10, 5, 5);
以及向上滚动是试验和错误值。当我左右旋转屏幕时(在模拟器上),标签没有正确对齐。有人可以告诉我如何计算这个,以便它适用于所有的屏幕方向?
我使用过Swift 2,自动布局。