adi*_*dit 21 iphone objective-c ipad ios
检查UIView在当前UIScrollView的contentView上是否可见的最简单,最优雅的方法是什么?有两种方法可以做到这一点,一种是涉及UIScrollView的contentOffset.y位置,另一种方法是转换rect区域?
Mar*_*arc 20
如果您正在尝试计算屏幕上是否滚动了视图,请尝试以下操作:
CGRect thePosition = myView.frame;
CGRect container = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.frame.size.width, scrollView.frame.size.height);
if(CGRectIntersectsRect(thePosition, container))
{
// This view has been scrolled on screen
}
Run Code Online (Sandbox Code Playgroud)
Swift 5:如果您想触发一个事件,该事件检查整个UIView在滚动视图中是否可见:
extension ViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.bounds.contains(targetView.frame) {
// entire UIView is visible in scroll view
}
}
}
Run Code Online (Sandbox Code Playgroud)
scrollViewDidScroll:在滚动视图中实现委托并手动计算哪些视图是可见的(例如,通过检查是否CGRectIntersectsRect(scrollView.bounds, subview.frame)返回true).
小智 5
更新为 swift 3
var rect1: CGRect!
// initialize rect1 to the relevant subview
if rect1.frame.intersects(CGRect(origin: scrollView.contentOffset, size: scrollView.frame.size)) {
// the view is visible
}
Run Code Online (Sandbox Code Playgroud)
我认为你的想法是正确的。如果是我的话我会这样做:
//scrollView is the main scroll view
//mainview is scrollview.superview
//view is the view inside the scroll view
CGRect viewRect = view.frame;
CGRect mainRect = mainView.frame;
if(CGRectIntersectsRect(mainRect, viewRect))
{
//view is visible
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14508 次 |
| 最近记录: |