我需要密切监视滚动视图的比例,以便我可以根据滚动视图的动画缩放更新内容视图的元素(管理多个CALayers的子视图).
在iOS 3.1上,一切都按预期工作,我使用zoomToRect:animated:并且在动画发生时重复调用UIScrollViewDelegate的scrollViewDidScroll:消息,让我根据实际缩放更新子视图元素.
iOS 4.0上的相同代码不会表现出相同的行为.当我调用zoomToRect:animated:时,委托(scrollViewDidScroll:和scrollViewDidZoom)只被调用一次,这使得我的子元素被同步,直到动画结束.实际上,子元素会立即跳转然后被缩放动画捕捉到所有内容都在正确的位置.就像动画没有在子视图CALayers上获取修改一样.
我已尝试使用动画块手动动画,但情况相同,没有渐进式回调调用.我也尝试过KVO,但我不清楚如何使用UIScrollView管理的动画.
在iOS 4上是否有一种解决方法可以让我将比例值推送到我的子视图,因为UIScrollView比例是动画的?
我正在尝试使用新的scrollViewWillEndDragging:withVelocity:targetContentOffset:iOS 5中的UIScrollView委托调用,但我似乎无法让它真正正确地回应我.我正在更改targetContentOffset-> x值,但它永远不会被使用.我知道代码正在运行,因为它会在该函数中命中断点.我甚至尝试将偏移值设置为硬编码数字,因此我知道它最终会在哪里但它永远不会起作用.
有没有人能够正确使用它并使其工作?是否有任何其他委托调用必须实现才能使其工作?
这是我的代码,万一有人看到它有问题:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
// goodOffsetX returns the contentOffset i want the scrollView to stop at
CGFloat goodOffsetX = [self _horizontalContentOffsetForTargetHorizontalContentOffset:(*targetContentOffset).x velocity:velocity.x];
NSLog( @" " );
NSLog( @"scrollViewWillEndDragging" );
NSLog( @" velocity: %f", velocity.x );
NSLog( @" currentX: %f", scrollView.contentOffset.x );
NSLog( @" uikit targetX: %f", (*targetContentOffset).x );
NSLog( @" pagedX: %f", goodOffsetX );
targetContentOffset->x = goodOffsetX;
}
Run Code Online (Sandbox Code Playgroud) 我正在显示相当大的图像UITableView.当用户滚动时,我希望在桌面视图中始终将中心最多的照片捕捉到中间.也就是说,当桌子处于静止状态时,它将始终UITableViewCell与中心对齐.
怎么做到这一点?
如何测试滚动视图是否弹跳?反弹结束时是否有通知或某事?
该文件指出它的points(每秒,我假设)?但是,我得到的值在(.5, 3.5)范围内.滚动视图然后在停止之前行进几百个点.实际的初始速度应该是数量级的不同.
在UIScrollview中水平滚动时,如果我在同一方向快速滑动两次,滚动视图会猛烈跳跃.反正有没有阻止这种情况发生?为了详细解释,这里是一个来自scrollview的事件日志,在大多数委托方法中我只打印x坐标.
scrollViewWillBeginDragging:
14:55:12.034 Will begin dragging!
14:55:12.037 - Position -0.000000
scrollViewWillBeginDeceleration:
14:55:12.129 Deceleration rate 0.998000
14:55:12.152 + Position 314.000000
scrollViewWillBeginDragging:
14:55:12.500 Will begin dragging!
14:55:12.522 - Position 1211.000000
scrollViewWillBeginDeceleration:
14:55:12.530 Deceleration rate 0.998000
14:55:12.533 + Position 1389.000000
scrollViewDidScroll: (printing values < 0 && > 6000 (bounds.size.width)
14:55:12.595 !!! Position 7819.000000
14:55:12.628 !!! Position 9643.000000
14:55:12.658 !!! Position 10213.000000
14:55:12.688 !!! Position 10121.000000
14:55:12.716 !!! Position 9930.000000
... contentoffset.x drops with around 400 each scrollviewdidscroll call ...
14:55:13.049 !!! Position 6508.000000 …Run Code Online (Sandbox Code Playgroud) 我有一个控制器,它作为两个滚动视图的委托,放置在由前面提到的视图控制器管理的视图中.
为了区分两个滚动视图,我试图使用switch语句(而不是简单的指针与if语句比较).我已将这两个滚动视图标记为0和1
NSUInteger const kFirstScrollView = 0;
NSUInteger const kSecondScrollView = 1;
Run Code Online (Sandbox Code Playgroud)
当我尝试在switch语句中使用这些常量时,编译器说case语句不是常量.
switch (scrollView.tag) {
case kFirstScrollView: {
// do stuff
}
case kSecondScrollView: {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
cocoa-touch switch-statement uiscrollview uiscrollviewdelegate
我正在实现UIScrollViewDelegate并用它做很多事情.但是,我刚刚发现了一个烦人的问题.
我希望scrollViewDidEndDecelerating:将后总是叫scrollViewWillBeginDecelerating: .但是,如果我只是触摸我的ScrollView(实际上我正在触摸scrollView中的按钮),则会调用scrollViewDidEndDecelerating:并且不会调用scrollViewWillBeginDecelerating:.
那么我怎么能避免使用scrollViewDidEndDecelerating:当我只是按下UIScrollView中的按钮时调用?
谢谢!
有没有办法知道动画何时结束并且uiscrollview已经停止.
我想在我的项目中使用Pager Sliding TabStrip.寻呼机Sliding Tapstrip适用于Android.我们可以这样定义吗?我已经采用了一个滚动视图,在其上添加了用于表格的子视图并获取了一个uivew,添加了按钮作为子视图,并添加了uilabel作为tabstrip的子视图.使用滚动视图意味着拖动滚动视图,必须移动tabrip.我一直坚持这个概念,我不知道解决这个问题.我如何得到这个概念?请任何人给我任何想法.
uiscrollview ×9
ios ×8
objective-c ×2
cocoa-touch ×1
ios4 ×1
ios5 ×1
iphone ×1
uikit ×1
uitableview ×1