1

我已经实现了一个圆形滚动视图。

它工作正常,但有时滚动视图代表没有被调用。

我已经附上了代码,其中的错误是什么......

//
//  MyScrollViewViewController.h
//  MyScrollView
//
//  Created by Biranchi on 26/05/09.
//  Copyright PurpleTalk 2009. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MyScrollViewViewController : UIViewController <UIScrollViewDelegate> {

    IBOutlet UIScrollView *scrollView;
    IBOutlet UIView *view1;
    IBOutlet UIView *view2;
    IBOutlet UIView *view3;


    IBOutlet UILabel *label1;
    IBOutlet UILabel *label2;
    IBOutlet UILabel *label3;


    int viewAtIndex;
    int currentOffset;
    int firstOffset, lastOffset;
    int currentContentInset;
    int tempOffset;


    NSMutableArray *arr;
}

@end



//
//  MyScrollViewViewController.m
//  MyScrollView
//
//  Created by Biranchi on 26/05/09.
//  Copyright PurpleTalk 2009. All rights reserved.
//

#import "MyScrollViewViewController.h"

@implementation MyScrollViewViewController



// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }


    return self;
}

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/


//static int j = 0;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {

    arr = [[NSMutableArray alloc] init];

    [arr addObject:view1];
    [arr addObject:view2];
    [arr addObject:view3];

    //NSLog(@"arr : %@", arr);

    scrollView.minimumZoomScale = 1.0f;
    scrollView.maximumZoomScale = 2.0f;
    scrollView.delegate = self;
    //scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;


    firstOffset = 0;
    currentOffset = 320;
    lastOffset = 640;
    currentContentInset = 320;

    CGRect frame;

    //Scroll View

    frame = [view1 frame];
    [view1 setBackgroundColor:[UIColor redColor]];
    frame.origin.x = 0;
    [view1 setFrame:frame];

    frame = [view2 frame];
    [view2 setBackgroundColor:[UIColor greenColor]];
    frame.origin.x = 320;
    [view2 setFrame:frame];

    frame = [view3 frame];
    [view3 setBackgroundColor:[UIColor blueColor]];
    frame.origin.x = 640;
    [view3 setFrame:frame];

    [scrollView addSubview:view1];
    [scrollView addSubview:view2];
    [scrollView addSubview:view3];

    [scrollView setContentSize:CGSizeMake(3*320, 480)];
    [scrollView setContentOffset: CGPointMake(currentOffset,0) animated:NO];

    [self.view addSubview:scrollView];

    //NSLog(@"Self.view Subviews : %@", [self.view subviews]);
}


#pragma mark -
#pragma mark ScrollView Delegate 



- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{
    NSLog(@"Will begin dragging ===");

    CGPoint offset = [scrollView1 contentOffset];
    tempOffset = offset.x;
    NSLog(@"Offset : %@", NSStringFromCGPoint(offset));

}


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView1
{
    NSLog(@"ScrollView did end decelerating ");

    int i, result;

    CGPoint offset = [scrollView1 contentOffset];
    currentOffset = offset.x;
    NSLog(@"Offset : %@", NSStringFromCGPoint(offset));

    if( ( (currentOffset - tempOffset) > 0 ) || ( (currentOffset == tempOffset) && (currentOffset == lastOffset) ) )
    {
        NSLog(@"Show next page , current : %d, temp : %d", currentOffset, tempOffset);  


        for(i=0; i<[arr count]; i++)
        {
            if( [[arr objectAtIndex:i] frame].origin.x == currentOffset )
            {
                NSLog(@"Current view on screen : %d", i);
                break;
            }
        }


        NSLog(@"Before Current offset : %d, last offset : %d", currentOffset, lastOffset);

        if( currentOffset == lastOffset )
        {
            result = i-2;

            if(result < 0)
            {
                result += 3;    
            }


            NSLog(@"Change the frame of object at index : %d", result);

            [[arr objectAtIndex:result] setFrame:CGRectMake(currentOffset + 320, 0, 320, 480)];
            [scrollView1 setContentSize:CGSizeMake(currentOffset+640,480) ];
            lastOffset += 320;
            firstOffset += 320;
        }

        NSLog(@"Current offset : %d, first offset : %d , last offset : %d", currentOffset, firstOffset,  lastOffset);

    }
    else if(  ( (currentOffset - tempOffset) < 0 ) || ( (currentOffset == tempOffset) && (currentOffset == firstOffset) ) ) 
    {
        //NSLog(@"Show prev page"); 


        for(i=0; i<[arr count]; i++)
        {
            if( [[arr objectAtIndex:i] frame].origin.x == currentOffset )
            {
                NSLog(@"==Current view on screen : %d", i);
                break;
            }
        }


        NSLog(@"==Before Current offset : %d, First offset : %d", currentOffset, firstOffset);

        if( currentOffset == firstOffset )
        {
            result = i+2;

            if(result >= 3)
            {
                result -= 3;    
            }


            NSLog(@"==Change the frame of object at index : %d", result);

            [[arr objectAtIndex:result] setFrame:CGRectMake(currentOffset - 320, 0, 320, 480)];

            UIEdgeInsets contentInset = {0,currentContentInset,0,0};
            [scrollView1 setContentInset:contentInset ];

            firstOffset -= 320;
            currentContentInset += 320;
            lastOffset -= 320;
        }

        NSLog(@"==Current offset : %d, first offset : %d, Last Offset : %d", currentOffset, firstOffset, lastOffset);

    }
    else 
    {
        NSLog(@"Error in offset");
    }

}


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView1
{
    return [[scrollView1 subviews] objectAtIndex:viewAtIndex];  
}


- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView1 withView:(UIView *)view atScale:(float)scale
{
    //NSLog(@"View Zoomed : %@, scale : %f", view, scale);
}

#pragma mark -


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [arr release];
    [super dealloc];
}

@end
4

0 回答 0