UIScrollView做了Scroll

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScrollView做了Scroll相关的知识,希望对你有一定的参考价值。

我希望显示一个停留在页面上5秒的图像,但每次我的滚动视图滚动时都会出现。所以显然我需要结合UILabel的动画和UIScrollView的一些方法。我不确定使用哪一个是诚实的。另外我在一个UIScrollView上有两个UIViewControllers所以我不知道我应该设置为代表。

以下是我目前的动画

 [UIView animateWithDuration:0.3 animations:^{  // animate the following:
    pageCountImage.frame = CGRectMake(0, 0, 100, 50); // move to new location
}];
答案

您的视图控制器可以是两个滚动视图的委托。同意@Ravi您可以使用委托参数来确定滚动的滚动视图。

听起来你需要打包一些动画才能对UI有意义:

// hide or show the page count image after a given delay, invoke completion when done
- (void)setPageCountImageHidden:(BOOL)hidden delay:(NSTimeInterval)delay completion:(void (^)(BOOL))completion {

    BOOL currentlyHidden = self.pageCountImage.alpha == 0.0;
    if (hidden == currentlyHidden) return;

    [UIView animateWithDuration:0.3 delay:delay options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.pageCountImage.alpha = (hidden)? 0.0 : 1.0;
    } completion:completion];
}

// move the page count image to the correct position given a scroll view content offset
- (void)positionPageControlForContentOffset:(CGFloat)xOffset {

    // assume page width is a constant (the width of a page in the scroll view)
    NSInteger page = xOffset / kPAGEWIDTH;

    // assume max page is a constant (the max number of pages in scroll view)
    // scroll positions in the "bounce" will generate page numbers out of bounds, fix that here...
    page = MAX(MIN(page, kMAXPAGE), 0);

    // kPAGE_INDICATOR_WIDTH the distance the page image moves between pages
    // kPAGE_INDICATOR_ORIGIN the page image x position at page zero
    CGFloat xPosition = kPAGE_INDICATOR_ORIGIN + page * kPAGE_INDICATOR_WIDTH;

    // assume y position and size are constants
    CGRect pageIndicatorFrame = CGRectMake(xPosition, kYPOS, kWIDTH, kHEIGHT);

    // finally, do the animation
    [UIView animateWithDuration:0.3 animations:^{
        self.pageCountImage.frame = pageIndicatorFrame;
    }];
}

然后在视图中滚动:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (scrollView == /* the scroller with the page control */) {

        [self setPageCountImageHidden:NO delay:0.0 completion:^(BOOL finished) {
            [self positionPageControlForContentOffset:scrollView.contentOffset.x];
            [self setPageCountImageHidden:YES delay:5.0 completion:^(BOOL finished){}];
        }];
    }
    // and so on...
另一答案

你应该实现<UIScrollViewDelegate>。利用- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法并在那里编写动画代码。如果您有多个滚动视图,则可以执行以下操作:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(scrollView == myScrollView1)
        // do something
    else if (scrollView == myScrollView2)
        // do something else
    else
        // do something else
}
另一答案

就像tableview一样,您应该配置和控制滚动操作。您可以编写控制器的扩展并控制所有滚动操作。作为示例,您可以检查:

extension ExampleViewController: UIScrollViewDelegate {

    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        // your actions here
    }

    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
        // your actions here
    }

    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        // your actions here
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // your actions here
    }
}

以上是关于UIScrollView做了Scroll的主要内容,如果未能解决你的问题,请参考以下文章

iPhone UIScrollview:当位于 Scroll View 的子 UIView 上的 480 像素以下时,按钮不响应

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

使用PageChangeListener动态更改选项卡图标的颜色

释放指向 UIScrollView 的强指针 [关闭]

UIScrollView 在捏合时自动向下滚动?

UI Scroll View 内的视图上的触摸事件