在一篇文章中,在iPhone上制作长卷轴并非糟糕,Aza Raskin描述了一种替代滚动条控件,它更适合在非常长的页面上使用:

滚动条"保持一段时间"以激活它并不重要; 我很好,只需沿着iPhone屏幕的右边缘滑动即可抓住滚动条手柄.我的想法是,如果我在物理屏幕上向下拖动手柄3/4,我将在页面上向下移动3/4.
Dropbox iPhone应用程序(它很棒,顺便说一下!)就是这种滚动条适用于长PDF文档.通过拖动手柄上的任何位置来定期滚动; 拖动手柄会将视图移动到该位置.这似乎是"从头开始"实现的,因为我认为SDK不够灵活,无法自定义现有滚动条的行为.
但是,Dropbox使用本机文档查看器在iPhone上显示文档,因此他们以某种方式向其添加滚动条功能.看滚动条手柄?您可以拖动它以快速到达文档中的其他位置.

这个概念与索引栏在UITableView中的工作方式非常相似(即Contacts.app); 索引在表格的右侧显示为条形(例如,"a"到"z"),您可以触摸特定标签以跳转到目标部分.但是,在这种情况下,一个非常长的页面没有部分,它应该适用于通用滚动,而不是跳转到部分.
那么我该如何实现这种滚动方法呢?我正在寻找一般的想法和具体的实施细节.如果存在开源实现,我也很感兴趣(这似乎是一个通用的问题/解决方案).
我有一个带有imageView的scrollView.这scrollView是superView的一个子视图,而imageView是一个子视图scrollView.我还有一个标签(在超级视图级别),每隔毫秒从NSTimer接收其text属性的更新值.
问题是:在滚动期间,标签停止显示更新.滚动结束时,标签上的更新将重新开始.更新重启时,它们是正确的; 这意味着label.text值按预期更新,但在滚动时,更新显示在某处覆盖. 无论滚动与否,我都希望在标签上显示更新.
以下是标签更新的实现方式:
- (void)startElapsedTimeTimer {
[self setStartTime:CFAbsoluteTimeGetCurrent()];
NSTimer *elapsedTimeTimer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(updateElapsedTimeLabel) repeats:YES];
}
- (void)updateElapsedTimeLabel {
CFTimeInterval currentTime = CFAbsoluteTimeGetCurrent();
float theTime = currentTime - startTime;
elapsedTimeLabel.text = [NSString stringWithFormat:@"%1.2f sec.", theTime];
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
如何从我的滚动视图中删除所有子视图...
我在滚动视图上面有一个uiview和一个按钮,就像这样....
这是我在滚动视图中添加子视图的代码
-(void)AddOneButton:(NSInteger)myButtonTag {
lastButtonNumber = lastButtonNumber + 1;
if ((lastButtonNumber == 1) || ((lastButtonNumber%2) == 1)) {
btnLeft = 8;}
else if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) {
btnLeft = 162;
}
CGRect frame1 = CGRectMake(btnLeft, btnTop, 150, 150);
CGRect frame2 = CGRectMake(btnLeft, btnTop, 150, 150);
UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
Button.frame = frame1;
Button.tag = myButtonTag;
[Button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[Button setBackgroundColor:[UIColor clearColor]];
[Button setBackgroundImage:[UIImage imageNamed:@"WaitScreen.png"] forState:UIControlStateHighlighted];
GraphThumbViewControllerobj = [[GraphThumbViewController alloc] initWithPageNumber:[[GraphIdArray objectAtIndex:myButtonTag]intValue]];
GraphThumbViewControllerobj.view.frame=frame2;
GraphThumbViewControllerobj.lblCounter.text=[NSString …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一种类似于"Cut the Rope"游戏用来选择级别包的"游戏模式"菜单:

我特别想要的是达到显示"当前项目"(在这种情况下,"2. Fabric Box"项目)加上一些前一项和后一项的相同效果(以确保用户知道滚动时可以使用更多模式),启用分页(使滚动视图自动"居中"在这些项目上).
对于启用了分页的UIScrollView来说,这似乎是一项自然的工作,但是从文档中可以看出分页在视图边界的倍数上发生.
所以:如果分页发生在视图边界的倍数上,有没有办法用UIScrollView实现这种效果?
我们看到屏幕的整个宽度这一事实表明UIScrollView框架的宽度在这种情况下将是320px,但是每个单独的项目需要小于那个以显示前一个和下一个项目的一点点,从而弄乱了分页......
iphone objective-c uiscrollview ios programmatically-created
我建立加载的应用程序小简单的HTML(本地)的量为单一全屏的UIWebView.我注意到滚动此Web视图与滚动任何其他UIScrollView 有很大不同.这似乎不是性能或响应性问题本身......这只是在向上和向下拖动和轻弹Web视图时动量如何发挥作用的问题.它只是感觉不是非常"原生"(因为没有更好的词).这就像滚动糖蜜或布丁......有点"粘"而不像你想要的那样"光滑".
有谁知道是什么原因造成的?有没有办法解决它,或者至少使滚动UIWebView感觉更"原生"?
有没有人知道在使用UIScrollView时暂时关闭缩放的方法?
我看到你可以使用以下方法禁用滚动:
self.scrollView.scrollEnabled = false;
Run Code Online (Sandbox Code Playgroud)
但我没有看到类似的缩放命令.有什么想法吗?
滚动视图(将pagingEnabled设置为YES)的最简单方法是将页面宽度设置为除滚动视图边界以外的其他内容吗?
让我举个例子.假设我有一个包含10个项目的滚动视图,每个项目宽150像素,我的滚动视图宽300像素.如果我从视图1和2开始可见并向右水平滚动,我希望下一个"页面"显示项目2和3.如果我向右滚动一页,我会看到项目3和4.
有没有人这样做过?如果没有,你会采用什么策略?
我在UITableView内心问题UIScrollView.当我滚动外部时scrollView,第一次触摸时table不会收到willSelect/didSelect事件,但第二次触摸时不会收到事件.更奇怪的是,细胞本身会得到触摸和突出显示的状态,即使delegate没有.
我的视图层次结构
UIView
- UIScrollView (outerscroll)
- Some other views and buttons
- UITableView (tableView)
Run Code Online (Sandbox Code Playgroud)
在滚动视图中,我有一些额外的视图可以动态扩展/关闭.表格视图需要与视图中的其他一些元素一起"固定"在顶部,这就是我创建此布局的原因,这使我可以通过使用转换以类似于Apple推荐的方式轻松移动元素.滚动发生了.
当outerscroll像这样移动时,表视图将使用转换效果进行转换:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.outerScrollView) {
CGFloat tableOffset = scrollView.contentOffset.y - self.fixedHeaderFrame.origin.y;
if (tableOffset > 0) {
self.tableView.contentOffset = CGPointMake(0, tableOffset);
self.tableView.transform = CGAffineTransformMakeTranslation(0, tableOffset);
}
else {
self.tableView.contentOffset = CGPointMake(0, 0);
self.tableView.transform = CGAffineTransformIdentity;
}
// Other similar transformations are done here, but not involving …Run Code Online (Sandbox Code Playgroud) 我实现了自定义刷新控件(我自己的类,而不是子类),并且由于某些原因,因为移动到iOS 8,设置滚动视图的contentInset(特别是UICollectionView)以启动刷新动画会导致奇怪的跳转/断断续续.这是我的代码:
- (void)containingScrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat scrollPosition = scrollView.contentOffset.y + scrollView.contentInset.top;
if( scrollPosition > 0 || self.isRefreshing )
{
return;
}
CGFloat percentWidth = fabs( scrollPosition ) / self.frame.size.height / 2;
CGRect maskFrame = self.maskLayer.frame;
maskFrame.size.width = self.imageLayer.frame.size.width * percentWidth;
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
self.maskLayer.frame = maskFrame;
[CATransaction commit];
}
- (void)containingScrollViewDidEndDragging:(UIScrollView *)scrollView
{
if( ( self.maskLayer.frame.size.width >= self.imageLayer.frame.size.width ) && !self.isRefreshing )
{
self.isRefreshing = YES;
[self setLoadingScrollViewInsets:scrollView];
[self startAnimation];
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
- (void)setLoadingScrollViewInsets:(UIScrollView *)scrollView …Run Code Online (Sandbox Code Playgroud) uiscrollview ×10
ios ×7
iphone ×6
objective-c ×5
cocoa-touch ×2
zoom ×2
autolayout ×1
scroll ×1
uitableview ×1
uiview ×1
uiwebview ×1
xcode ×1
zooming ×1