使用分页动画UIScrollView

时间:2014-02-14 08:49:09

标签: ios animation uiscrollview scroll-paging

我有一个scrollView,每个屏幕有2个子视图,因此有10个subviews.Paging现在被禁用。现在我希望每当我向上滚动滚动视图内的子视图时,它们应该填满整个屏幕,之后,正常滚动适用于在一个屏幕上启用分页的每个视图10个视图。任何帮助??

const NSUInteger kNumViews= 10;
const CGFloat vScrollObjWidth   = 160.0;
const CGFloat vScrollObjHeight  = 280.0;

- (void)layoutScrollViews
{
 UIView *view = nil;
 NSArray *subviews = [scrollView2 subviews];
  CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (vScrollObjWidth);
        }
    }


    [scrollView2 setContentSize:CGSizeMake((kNumViews+1) * vScrollObjWidth, scrollView2.bounds.size.height)];
}

- (void)viewDidLoad
{
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];
    scrollView2.delegate = self;
    [scrollView2 setBackgroundColor:[UIColor blackColor]];
    scrollView2.scrollEnabled = YES;

    for (i = 1; i <= kNumViews; i++)
    {
        NSString *imageName = [NSString stringWithFormat:@"imageV%d.jpg", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [imageView sizeToFit];
        imageView.layer.borderColor = [UIColor grayColor].CGColor;
        imageView.layer.borderWidth = 1.5f;

        CGRect rect = imageView.frame;
        rect.size.height = vScrollObjHeight;
        rect.size.width = vScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;
            imageView.userInteractionEnabled = YES;

        [scrollView2 addSubview:imageView];

    }
    [self layoutScrollViews];

    self.swipeRecognizerUp = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(scaleMove:)];
    [self.swipeRecognizerUp setDelegate:self];
    [scrollView2 addGestureRecognizer:self.swipeRecognizerUp];

    self.swipeRecognizerDown = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(scaleDown:)];
    [self.swipeRecognizerDown setDelegate:self];
    [scrollView2 addGestureRecognizer:self.swipeRecognizerDown];
    self.swipeRecognizerDown.enabled = NO;



}

-(void)scaleMove:(id)sender {

    [[[(UIPanGestureRecognizer*)sender view] layer] removeAllAnimations];
    [self.view bringSubviewToFront:[sender view]];

    CGPoint velocity = [sender velocityInView:self.view];
    if(abs(velocity.y) - abs(velocity.x) > 500 && velocity.y < 0){
        CGAffineTransform scale = CGAffineTransformMakeScale(1, 0.82);
        CGAffineTransform translate = CGAffineTransformMakeTranslation(0,254);
        [sender view].transform = CGAffineTransformConcat(translate, scale);
    [UIView animateWithDuration:0.5
                     animations:^(){
                         CGAffineTransform scale = CGAffineTransformMakeScale(2, 1.64);
                         CGAffineTransform translate = CGAffineTransformMakeTranslation(0,-254);
                         [sender view].transform = CGAffineTransformConcat(translate, scale);

                    }
                     completion:nil];

    scrollView2.pagingEnabled = YES;
    self.swipeRecognizerDown.enabled = YES;
    self.swipeRecognizerUp.enabled = NO;
    }
    }



-(void)scaleDown:(id)sender {
    [[[(UIPanGestureRecognizer*)sender view] layer] removeAllAnimations];
    [self.view bringSubviewToFront:[sender view]];
    CGPoint velocity = [sender velocityInView:self.view];
    if(abs(velocity.y) - abs(velocity.x) > 500 && velocity.y > 0){
        [sender view].transform = CGAffineTransformMakeScale(2, 1.64);
    [UIView animateWithDuration:0.5
                     animations:^(){
                         [sender view].transform = CGAffineTransformMakeScale(1.0, 0.82);
                     }
                     completion:nil];
    scrollView2.pagingEnabled = NO;
    self.swipeRecognizerUp.enabled = YES;
    self.swipeRecognizerDown.enabled = NO;
    }

}

0 个答案:

没有答案