您的位置:首页 > 移动开发 > Swift

swift中UIScrollView的使用(常规使用,以及contentInset属性设置)

2016-10-31 18:15 477 查看
github学习地址:https://github.com/potato512/SYSwiftLearning

效果图:



关键源码

func setUI()
{
let mainScrollView = UIScrollView(frame: self.view.bounds)

// 添加到父视图
self.view.addSubview(mainScrollView)

// 添加子视图label
var originY:CGFloat = 10.0
for number in 1...10
{
let label = UILabel(frame: CGRectMake(10.0, originY, (CGRectGetWidth(mainScrollView.bounds) - 10.0 * 2), 200.0))
mainScrollView.addSubview(label)
label.backgroundColor = UIColor(red: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), green: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), blue: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), alpha: 1.0)
label.textAlignment = .Center
label.text = String(format: "scrollView add 第 %ld 个 label", arguments: [number]);

originY = (CGRectGetMinY(label.frame) + CGRectGetHeight(label.frame) + 10.0)
}

// 背景颜色
mainScrollView.backgroundColor = UIColor(red: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), green: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), blue: CGFloat(CGFloat(random()) / CGFloat(RAND_MAX)), alpha: 1.0)
// 自适应父视图
mainScrollView.autoresizingMask = UIViewAutoresizing.FlexibleHeight
// 其他属性
mainScrollView.scrollEnabled = true // 可以上下滚动
mainScrollView.scrollsToTop = true // 点击状态栏时,可以滚动回顶端
mainScrollView.bounces = true // 反弹效果,即在最顶端或最底端时,仍然可以滚动,且释放后有动画返回效果
mainScrollView.pagingEnabled = false // 分页显示效果
mainScrollView.showsHorizontalScrollIndicator = true // 显示水平滚动条
mainScrollView.showsVerticalScrollIndicator = true // 显示垂直滚动条
mainScrollView.indicatorStyle = UIScrollViewIndicatorStyle.White // 滑动条的样式
// 设置内容大小
mainScrollView.contentSize = CGSizeMake(CGRectGetWidth(self.view.bounds), originY)
// 设置代理
mainScrollView.delegate = self

// 头尾视图
self.headerLabel = UILabel(frame: CGRectMake(0.0, 0.0, CGRectGetWidth(self.view.frame), 0.0))
self.view.addSubview(self.headerLabel)
self.headerLabel.backgroundColor = UIColor.yellowColor()
self.headerLabel.textColor = UIColor.redColor()
self.headerLabel.textAlignment = .Center
self.headerLabel.text = "headerLabel"
self.headerLabel.hidden = false

self.footerLabel = UILabel(frame: CGRectMake(0.0, (CGRectGetHeight(self.view.frame) - 40.0), CGRectGetWidth(self.view.frame), 0.0))
self.view.addSubview(self.footerLabel)
self.footerLabel.autoresizingMask = .FlexibleTopMargin
self.footerLabel.backgroundColor = UIColor.yellowColor()
self.footerLabel.textColor = UIColor.redColor()
self.footerLabel.textAlignment = .Center
self.footerLabel.text = "footerLabel"
self.footerLabel.hidden = false
}
// MARK: - UIScrollViewDelegate

func scrollViewWillBeginDragging(scrollView: UIScrollView)
{
print("1 scrollViewWillBeginDragging")

scrollView.contentInset = UIEdgeInsetsZero
}

func scrollViewDidScroll(scrollView: UIScrollView)
{
print("2 scrollViewDidScroll")

// 上下拉时滚动时的位移量(向上滚动时,位移是正数;向下拉动时,位移是负数)
let offsetY = scrollView.contentOffset.y
print("offsetY = \(offsetY)")

// 最大位移量(注意scrollview的contentsize的高与当前视图控制器的屏幕高度的关系)
let offsetYMax = scrollView.contentSize.height
print("offsetYMax = \(offsetYMax)")
let offsetYTmp = offsetYMax - CGRectGetHeight(self.view.bounds)
print("offsetYTmp = \(offsetYTmp)")

if 0 >= offsetY
{
// 向下拉

// 重置headerLabel的frame
var rectHeader = self.headerLabel.frame
rectHeader.size.height = offsetY * -1.0
self.headerLabel.frame = rectHeader

//
if -100.0 >= offsetY
{
scrollView.contentInset = UIEdgeInsetsMake(80.0, 0.0, 0.0, 0.0)
}
}
else
{
// 向上拉
let offsetYUp = offsetY - offsetYTmp

// 重置footerLabel的frame
var rectFooter = self.footerLabel.frame
rectFooter.origin.y = CGRectGetHeight(self.view.bounds) - offsetYUp
rectFooter.size.height = offsetYUp
self.footerLabel.frame = rectFooter

//
if 100.0 <= offsetYUp
{
scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 80.0, 0.0)
}
}
}

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
print("3 scrollViewWillEndDragging")
}

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)
{
print("4 scrollViewDidEndDragging")
}

func scrollViewWillBeginDecelerating(scrollView: UIScrollView)
{
print("5 scrollViewWillBeginDecelerating")
}

func scrollViewDidEndDecelerating(scrollView: UIScrollView)
{
print("6 scrollViewDidEndDecelerating")

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: