我有UIScrollView与多个UIVIew子视图。我想更新每个UIView显示在UIScrollView可见部分的数据。viewWillAppear的子视图
什么是被触发的回调?我试图viewWillAppear,但它似乎并没有被调用。
谢谢。 :)
我有UIScrollView与多个UIVIew子视图。我想更新每个UIView显示在UIScrollView可见部分的数据。viewWillAppear的子视图
什么是被触发的回调?我试图viewWillAppear,但它似乎并没有被调用。
谢谢。 :)
你必须自己做计算。在滚动视图的委托实施scrollViewDidScroll:
和手动计算,其观点是可见的(例如,通过检查,如果CGRectIntersectsRect(scrollView.bounds, subview.frame)
返回true
轻微的改进,我想知道这是显示在滚动视图的视图的数量:。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
// Figure out how much of the self.userFeedbackView is displayed.
CGRect frame = CGRectIntersection(self.scrollView.bounds, self.userFeedbackView.frame);
CGFloat proportion = (frame.size.height*frame.size.width)/(self.userFeedbackView.frameWidth*self.userFeedbackView.frameHeight);
NSLog(@"%f; %@", proportion, NSStringFromCGRect(frame));
}
以上的答案是正确的,如果你的滚动视图是不是在状态的放大。在情况下,如果你需要考虑变焦太
这里是代码
您的滚动视图可以放大上述计算将无法正常工作CGRect visibleRect;
visibleRect.origin = self.mapScrollView.contentOffset;
visibleRect.size = self.mapScrollView.bounds.size;
float theScale = 1.0/self.mapScrollView.zoomScale;
visibleRect.origin.x *= theScale;
visibleRect.origin.y *= theScale;
visibleRect.size.width *= theScale;
visibleRect.size.height *= theScale;
if(CGRectIntersectsRect(visibleRect, btnPin.frame)){
...
}
这太棒了!不会想出这一个 – csduarte 2016-03-31 02:45:28
斯威夫特3溶液
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let viewFrame = greenView.frame
let container = CGRect(x: scrollView.contentOffset.x, y: scrollView.contentOffset.y, width: scrollView.frame.size.width, height: scrollView.frame.size.height)
// We may have received messages while this tableview is offscreen
if (viewFrame.intersects(container)) {
// Do work here
print("view is visible")
}
else{
print("nope view is not on the screen")
}
}
好了,由于某种原因,我的印象是,有一个内置的回调。谢谢。 – nan 2010-06-01 16:08:26
工程就像一个魅力,谢谢! – jhilgert00 2012-02-22 06:45:54
从我可以收集的viewWillAppear:和它的亲属只被称为第一次视图添加到视图层次结构。即使superview的viewWillAppear:被调用,那些已经在其层次结构中的子视图也不会。因此,对于这种简单的情况,您需要告诉您的子视图从哪个根视图获取该消息进行刷新。 – 2012-10-07 23:45:43