Touch Events: Concept and using it to Scroll Images

n iPhone/iPad app, touch is the most common action. Here,I am describing touch events and a simple way to attach it with image view and with the help of touch events, images will move left/right when user swipe on the image i.e. if one swipe from left to right, image to left of the current image appears on the screen and vice-versa.
Also, the images will move in a circular loop i.e.  swipe on last image advances to first image.

The idea is to present the image view with added feature of scrolling.

Description: –Go to File>NewProject>ViewBasedApplication and enter the name the project.I have taken the name as “ImageTouch”. –Next, go To File>NewFile and choose ObjectiveC class and also make it subclass of UIView.Then click choose and enter FileName and I have taken as “TouchImageView”. –Next go to nib file that is  created i.e. “ImageTouchViewController.xib” and open it and select the view, change its class  to “TouchImageView”.

–Now, drag “ImageView ” in the view of nib file.

–In TouchImageView.h

#import 
@interface TouchImageView : UIView 
{
NSMutableArray*_imagesArray;
 
NSInteger_keyIndex;
NSInteger_currentPoint;
NSInteger_movedPoint;
BOOL_IsMoved;
UIImageView*_imgView;
}
 
@property (nonatomic, retain) NSMutableArray* _imagesArray;
@property(nonatomic,retain) IBOutlet UIImageView* _imgView;
@end
Here,
_imageArray is used to store images as object.
_keyIndex :the index of the image to be displayed.
_currentPoint: X-coordinate of the point where touch began.
_movedPoint: X-coordinate of the point where touch ended.
_IsMoved : To indicate whether the image has been swapped or not.
 
In TouchImageView.m, I will describe  initialization step and touch events:
 
-(void) awakeFromNib
{
// Index initialization
_keyIndex=0;
_imagesArray=[[NSMutableArrayarrayWithObjects:[UIImageimageNamed:@"ball-black.png"],
  [UIImageimageNamed:@"ball-cyan.png"],[UIImageimageNamed:@"ball-orange.png"],nil] retain];
[_imgView setImage:[_imagesArrayobjectAtIndex:0]];
}
 
This function will initialize the array with image objects.And set the a default image in imageView .I have taken default index as 0.
Touch events implemented are as : touchesBegan,touchesMoved,touchesEnded.

You must be sure to call the superclass implementation  (super) in all of the methods you override.
 
touchesBegan: 
This event triggers when user touches the view .And once it triggers, the first point where the touch has began is stored in _currentPoint.Following is the code:
 
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
{
[supertouchesBegan:touches withEvent:event];
_IsMoved=NO;
UITouch* touch = [[event allTouches] anyObject];
CGPoint touchedPoint = [touch locationInView:self];
_currentPoint = (int)touchedPoint.x;
}
Here,_currentPoint stores the x-coordinate of the point where the touch has began.
 
touchesMoved:
This event triggers only if user swipe on the screen.
And _IsMoved is used to check whether this event is fired or not.
 
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{
[touchesMoved:touches withEvent:event];
_IsMoved=YES;
// Move relative to the original touch point
CGPoint pt = [[touches anyObject] locationInView:self];
_movedPoint=(int)pt.x;
}
 
touchesEnded:
This event is fired when the touch ends.
Now,_IsMoved value is used to check whether the touchesMoves event was triggered or not.
If it is true then which image to be placed is calculated on the basis of _currentPoint and _movedPoint.
 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[supertouchesEnded:touches withEvent:event];
 
if(_IsMoved==NO)
{return;}
else 
{
if(_currentPoint-_movedPoint>0)
{//move left
if(_keyIndex==_imagesArray.count-1)
_keyIndex=0;
else
_keyIndex++;    
}
elseif(_currentPoint-_movedPoint
150 150 Burnignorance | Where Minds Meet And Sparks Fly!