Hi all,
I have implemented a circular scroll view.
It's working fine , but after sometimes the scroll view delegates are not getting called.
I have attached the code , what is the bug in it ....
//
//  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