• IOS开发之--UIScrollView pagingEnabled自定义翻页宽度


    用到UIScrollview的翻页效果时,有时需要显示一部分左右的内容,但是UIScrollView的PagingEnabled只能翻过整页,下面几个简单的设置即可实现

    技术点:

    1. 创建一个继承UIView的视图,并设置clipsToBounds= YES

    2. 添加一个UIscrollView控件,将其宽度设置为自定义翻页的宽度

    3. 设置UIScrollview 的clipsToBounds= NO

    4. 确保本View的宽度大于UIScrollView的宽度用于显示预览内容

    5. 重写本View的hittest方法,为了确保用户滑动UIscrollview以外的空间时也可以触发UIscrollview滑动

    ok! 下面是代码,为了方便,使用图片作为显示的每一页

    #define kLJItemWidth 240
    
    @implementation MyScrollview    {
    
        UIScrollView *scrollview;
    }
    
    - (id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
              scrollview = ({
                  UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(40, 0, kLJItemWidth, frame.size.height)];
                  scroll.pagingEnabled = YES;
                  scroll.clipsToBounds = NO;
                  scroll;
              })                                                                                      ;
    
            [self addSubview:scrollview];
                                self.clipsToBounds = YES;
        }
    
        return self;
    }
    
    -(void)loadImages:(NSArray *)array{
        int index = 0;
        [scrollview.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
        for(NSString * name in array){
            UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:name]];
            iv.contentMode = UIViewContentModeScaleToFill;
            CGRect fra = iv.frame;
            fra.size.width = kLJItemWidth;
            fra.origin.x = index * kLJItemWidth;
            iv.frame = fra;
    
            [scrollview addSubview:iv];
            index++;
        }
        scrollview.contentSize = CGSizeMake(scrollview.frame.size.width*index, scrollview.frame.size.height);
    }
    
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    {
        UIView *view = [super hitTest:point withEvent:event];
        if ([view isEqual:self])
        {
            for (UIView *subview in scrollview.subviews)
            {
                CGPoint offset = CGPointMake(point.x - scrollview.frame.origin.x + scrollview.contentOffset.x - subview.frame.origin.x,
                        point.y - scrollview.frame.origin.y + scrollview.contentOffset.y - subview.frame.origin.y);
    
                if ((view = [subview hitTest:offset withEvent:event]))
                {
                    return view;
                }
            }
            return scrollview;
        }
        return view;
    }
    
    @end
  • 相关阅读:
    PDI的steps:(8:Avro input)
    Expert Cube Development with Microsoft SQL Server 2008 Analysis Services(1)
    PDI的steps:(6:Analytic Query)
    PDI的steps:(5:Add value fields changing sequence)
    Junk dimensions
    PDI的steps:(8:Automatic Documentation Output)
    PDI的steps:(5:Add XML)
    PDI的steps:(7:Append streams)
    Expert Cube Development with Microsoft SQL Server 2008 Analysis Services(2)度量值和度量值组
    Expert Cube Development with Microsoft SQL Server 2008 Analysis Services(3) 第一章
  • 原文地址:https://www.cnblogs.com/v-jing/p/3509219.html
Copyright © 2020-2023  润新知