ios – 滚动时如何在UIScrollView中移动一个方向

ios – 滚动时如何在UIScrollView中移动一个方向,第1张

概述我是 Objective-c的新手.我创建UIScrollView对象并使用以下代码添加到我的视图中: height = self.view.frame.size.height;width = self.view.frame.size.width;scrollbar = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, h 我是 Objective-c的新手.我创建UIScrollVIEw对象并使用以下代码添加到我的视图中:

height = self.vIEw.frame.size.height;wIDth = self.vIEw.frame.size.wIDth;scrollbar = [[UIScrollVIEw alloc] initWithFrame:CGRectMake(0,wIDth,height)];scrollbar.delegate = self;scrollbar.backgroundcolor = [UIcolor whitecolor];scrollbar.maximumZoomScale = 1.0;scrollbar.minimumZoomScale = 1.0;scrollbar.clipsToBounds = YES;scrollbar.showsHorizontalScrollindicator = YES;scrollbar.pagingEnabled = YES;[scrollbar setContentSize:CGSizeMake(wIDth*4,height*4)];[self.vIEw addSubvIEw:scrollbar];for (int i = 1; i <= 4; i++) {    first = [[FirstVIEwController alloc]initWithNibname:@"FirstVIEwController" bundle:nil];    first.vIEw.frame = CGRectMake((i-1)*wIDth,height*4);    [scrollbar addSubvIEw:first.vIEw];    switch (i) {          ase 1:              first.vIEw.backgroundcolor = [UIcolor bluecolor];              break;          case 2:              first.vIEw.backgroundcolor = [UIcolor redcolor];              break;          case 3:              first.vIEw.backgroundcolor = [UIcolor greencolor];              break;          case 4:              first.vIEw.backgroundcolor = [UIcolor graycolor];              break;          default:              break;        }    }

在我的代码中,我在我的ScrollVIEw中添加了4个不同颜色的视图,现在我想在滚动我的ScrollVIEw上检测dx& dy(dx:Axis.x上的行驶距离& dy:Axis.y上的行驶距离)并检查这两个变量以及何时:

Notic:我希望当任何人触摸ScrollVIEw并在Axis上移动触摸(x或y)或触摸Both Axis(x和y)时检查:

if(dx> dy)禁用水平滚动并在垂直方向移动!!!
否则在水平方向移动并禁用垂直滚动!

- (voID)scrollVIEwDIDScroll:(UIScrollVIEw *)scrollVIEw {    CGRect visibleRect = CGRectMake(scrollVIEw.contentOffset.x,scrollVIEw.contentOffset.y,scrollVIEw.contentOffset.x + scrollVIEw.bounds.size.wIDth,scrollVIEw.contentOffset.y + scrollVIEw.bounds.size.height);    NSLog(@"%f,%f",visibleRect.origin.x,visibleRect.origin.y);    /*NSLog(@"x : %f",scrollVIEw.contentOffset.x);    NSLog(@"y : %f",scrollVIEw.contentOffset.y);*/    if (fabsf(scrollVIEw.contentOffset.x) > fabsf(scrollVIEw.contentOffset.y)) {        NSLog(@"Vertical SIDe");    }    else {        NSLog(@"Horizontal SIDe");    }}

请指导我们.我不能禁用一方并移动另一侧!谢谢

解决方法 您可以实现希望向代理添加一些代码的结果.这是我的VIEwController.m文件. -vIEwDIDLoad,#import语句和其他方法被省略.

@interface VIEwController () {    CGPoint initialOffset;    NSInteger direction; // 0 undefined,1 horizontal,2 vertical}@end@implementation VIEwController- (voID)scrollVIEwDIDScroll:(UIScrollVIEw *)scrollVIEw{    // retrIEve current offset    CGPoint currentOffset = scrollVIEw.contentOffset;    // do we kNow which is the predominant direction?    if (direction == 0) {        // no.        CGfloat dx = currentOffset.x - initialOffset.x;        CGfloat dy = currentOffset.y - initialOffset.y;        // we need to decIDe in which direction we are moving        if (fabs(dx) >= fabs(dy)) {            direction = 1; // horizontal        } else if (fabs(dy) > fabs(dx)) {            direction = 2;        }    }    // ok Now we have the direction. update the offset if necessary    if (direction == 1 && currentOffset.y != initialOffset.y) {        // remove y offset        currentOffset.y  = initialOffset.y;        // update        [scrollVIEw setContentOffset:currentOffset];    } else if (direction == 2 && currentOffset.x != initialOffset.x) {        currentOffset.x = initialOffset.x;        [scrollVIEw setContentOffset:currentOffset];    }}- (voID)scrollVIEwWillBeginDragging:(UIScrollVIEw *)scrollVIEw{    // store the current offset    initialOffset = scrollVIEw.contentOffset;    // reset flag    direction = 0; // AKA undefined}@end

当您开始拖动时,委托会将标志方向重置为“未知”状态,并存储当前内容偏移量.每次拖动移动后,都会调用-scrollVIEwDIDScroll :.在那里,您决定哪个是主要方向(如果尚未完成)并通过删除x(或y)偏移来相应地校正当前滚动偏移.

我用你提供的相同设置测试了这个,只是我在UIScrollVIEw中使用了UIImageVIEw,我通过InterfaceBuilder设置了一切,但它应该可以正常工作.从理论上讲,使用此方法可以替换directionLock,但请记住-scrollVIEwDIDScroll在 *** 作期间多次调用,并且每次重写内容偏移时(如果滚动在两个方向上进行).因此,如果启用了directionLock,则会保存对委托执行的setContentOffset的许多调用.

总结

以上是内存溢出为你收集整理的ios – 滚动时如何在UIScrollView中移动一个方向全部内容,希望文章能够帮你解决ios – 滚动时如何在UIScrollView中移动一个方向所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存