标签: uiscrollview

适用于iPhone UIView的自定义滚动条(长卷轴不吸吮)

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

粘滞滚动指示器

滚动条"保持一段时间"以激活它并不重要; 我很好,只需沿着iPhone屏幕的右边缘滑动即可抓住滚动条手柄.我的想法是,如果我在物理屏幕上向下拖动手柄3/4,我将在页面上向下移动3/4.

Dropbox iPhone应用程序(它很棒,顺便说一下!)就是这种滚动条适用于长PDF文档.通过拖动手柄上的任何位置来定期滚动; 拖动手柄会将视图移动到该位置.这似乎是"从头开始"实现的,因为我认为SDK不够灵活,无法自定义现有滚动条的行为.

但是,Dropbox使用本机文档查看器在iPhone上显示文档,因此他们以某种方式向其添加滚动条功能.看滚动条手柄?您可以拖动它以快速到达文档中的其他位置.

顶部的Dropbox滚动条 底部的Dropbox滚动条

这个概念与索引栏在UITableView中的工作方式非常相似(即Contacts.app); 索引在表格的右侧显示为条形(例如,"a"到"z"),您可以触摸特定标签以跳转到目标部分.但是,在这种情况下,一个非常长的页面没有部分,它应该适用于通用滚动,而不是跳转到部分.

那么我该如何实现这种滚动方法呢?我正在寻找一般的想法和具体的实施细节.如果存在开源实现,我也很感兴趣(这似乎是一个通用的问题/解决方案).

iphone scroll objective-c uiscrollview uiview

33
推荐指数
1
解决办法
4384
查看次数

在滚动UIScrollView期间,UILabel更新停止

我有一个带有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)

谢谢你的帮助.

iphone objective-c uiscrollview uiviewcontroller ios

33
推荐指数
2
解决办法
7281
查看次数

如何从scrollview中删除子视图?

如何从我的滚动视图中删除所有子视图...

我在滚动视图上面有一个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)

iphone xcode objective-c uiscrollview

32
推荐指数
4
解决办法
7万
查看次数

UIScrollView与分页+显示上一页/后一页的一部分

我正在尝试创建一种类似于"Cut the Rope"游戏用来选择级别包的"游戏模式"菜单:

剪切绳子菜单

我特别想要的是达到显示"当前项目"(在这种情况下,"2. Fabric Box"项目)加上一些前一项和后一项的相同效果(以确保用户知道滚动时可以使用更多模式),启用分页(使滚动视图自动"居中"在这些项目上).

对于启用了分页的UIScrollView来说,这似乎是一项自然的工作,但是从文档中可以看出分页在视图边界的倍数上发生.

所以:如果分页发生在视图边界的倍数上,有没有办法用UIScrollView实现这种效果?

我们看到屏幕的整个宽度这一事实表明UIScrollView框架的宽度在这种情况下将是320px,但是每个单独的项目需要小于那个以显示前一个和下一个项目的一点点,从而弄乱了分页......

iphone objective-c uiscrollview ios programmatically-created

32
推荐指数
1
解决办法
2万
查看次数

UIScrollView使用自动布局进行缩放

我想实现UIScrollView新途径,利用自动布局.我已经设置了从内部视图到滚动视图的约束,以便它可以contentSize自动计算它自己,并且就像魅力一样 - 除了当我尝试放大或缩小时所有的地狱都松散了.我甚至无法正确描述发生的事情,除了说内部视图"搞砸了".

你可以在这里看到这种行为的一个例子(不是我的项目;你必须设置滚动视图maximumZoomScale-viewForZoomingInScrollView:在缩放工作之前实现).

有没有其他人遇到这种行为?目前是否有任何方法可以放大UIScrollView使用自动布局而无需自己重新实现缩放行为?

zoom uiscrollview ios autolayout

32
推荐指数
1
解决办法
1万
查看次数

为什么滚动UIWebView*感觉*与滚动任何其他UIScrollView有很大不同?

我建立加载的应用程序简单的HTML(本地)的量为单一全屏的UIWebView.我注意到滚动此Web视图与滚动任何其他UIScrollView 很大不同.这似乎不是性能或响应性问题本身......这只是在向上和向下拖动和轻弹Web视图时动量如何发挥作用的问题.它只是感觉不是非常"原生"(因为没有更好的词).这就像滚动糖蜜或布丁......有点"粘"而不像你想要的那样"光滑".

有谁知道是什么原因造成的?有没有办法解决它,或者至少使滚动UIWebView感觉更"原生"?

cocoa-touch uiwebview uiscrollview ios

32
推荐指数
1
解决办法
7065
查看次数

在UIScrollView中关闭缩放

有没有人知道在使用UIScrollView时暂时关闭缩放的方法?

我看到你可以使用以下方法禁用滚动:

self.scrollView.scrollEnabled = false;
Run Code Online (Sandbox Code Playgroud)

但我没有看到类似的缩放命令.有什么想法吗?

iphone zoom zooming uiscrollview ios

31
推荐指数
5
解决办法
2万
查看次数

UIScrollView - 启用分页后,我可以"更改"页面宽度吗?

滚动视图(将pagingEnabled设置为YES)的最简单方法是将页面宽度设置为除滚动视图边界以外的其他内容吗?

让我举个例子.假设我有一个包含10个项目的滚动视图,每个项目宽150像素,我的滚动视图宽300像素.如果我从视图1和2开始可见并向右水平滚动,我希望下一个"页面"显示项目2和3.如果我向右滚动一页,我会看到项目3和4.

有没有人这样做过?如果没有,你会采用什么策略?

iphone cocoa-touch uiscrollview

31
推荐指数
2
解决办法
2万
查看次数

UIScrollView内的UITableView在滚动后没有收到第一次点击

简要

我在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)

objective-c uitableview uiscrollview ios

31
推荐指数
4
解决办法
3万
查看次数

动画UIScrollView contentInset会导致跳转卡顿

我实现了自定义刷新控件(我自己的类,而不是子类),并且由于某些原因,因为移动到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 ios uicollectionview pull-to-refresh

30
推荐指数
2
解决办法
2万
查看次数