您好,我有超级视图,其中有许多 UIImageViews。我已将 UIPanGesture 添加到超级视图中,在我的情况下为“View.m”。当用户在superview中拖动它时,我需要获取该UIImageView(子视图)的引用或换句话说对象。如果这可以通过'hittest'完成,那么让我知道如何在gestureHandler中使用它并且作为hittest返回UIView ,我如何将 UiView 转换为 UIImageView。这是我的代码
//
// View.m
// PuzzleGame
//
// Created by Noman Khan on 8/29/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "View.h"
#define noOfRows 5
#define noOfCols 4
@implementation View
@synthesize imageArray;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)initImageView {
int x = 1;
int y = 1;
// int width = 190;
// int height = 198;
int width = sizeOfRows;
int height = sizeOfCols;
UIImageView *imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x,y,width-10,height+5)];
imgView.image=[UIImage imageNamed:@"iceage_01.png"];
[self addSubview:imgView];
x=x+(width-9);
y=y+(sizeOfCols+9);
UIImageView *imgView1=[[UIImageView alloc]initWithFrame:CGRectMake(x,y,width-10,height+5)];
imgView1.image=[UIImage imageNamed:@"iceage_02.png"];
[self addSubview:imgView1];
- (void)drawRect:(CGRect)rect
{
imageArray=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"iceage_01.png"],[UIImage imageNamed:@"iceage_02.png"],[UIImage imageNamed:@"iceage_03.png"],[UIImage imageNamed:@"iceage_04.png"],[UIImage imageNamed:@"iceage_05.png"],[UIImage imageNamed:@"iceage_06.png"],[UIImage imageNamed:@"iceage_07.png"],[UIImage imageNamed:@"iceage_08.png"],[UIImage imageNamed:@"iceage_09.png"],[UIImage imageNamed:@"iceage_10.png"],[UIImage imageNamed:@"iceage_11.png"],[UIImage imageNamed:@"iceage_12.png"],[UIImage imageNamed:@"iceage_13.png"],[UIImage imageNamed:@"iceage_14.png"],[UIImage imageNamed:@"iceage_15.png"],[UIImage imageNamed:@"iceage_16.png"],[UIImage imageNamed:@"iceage_17.png"],[UIImage imageNamed:@"iceage_18.png"],[UIImage imageNamed:@"iceage_19.png"],[UIImage imageNamed:@"iceage_20.png"], nil];
CGContextRef content=UIGraphicsGetCurrentContext();
CGContextSetLineWidth(content, 2);
CGContextSetStrokeColorWithColor(content, [UIColor whiteColor].CGColor);
int totalWidth=self.frame.size.width;
int totalHeight=self.frame.size.height;
sizeOfRows=totalHeight/noOfRows;
sizeOfCols=totalWidth/noOfCols;
//making rows
int x = 0,y = 0;
for (int i=0; i<noOfRows+1; i++) {
CGContextMoveToPoint(content, x, y);
CGContextAddLineToPoint(content, 1000, y);
CGContextStrokePath(content);
//y=y+200;
y=y+sizeOfRows;
}
//making colums
x=0,y=0;
for (int i=0; i<noOfCols+1; i++) {
CGContextMoveToPoint(content, x, y);
CGContextAddLineToPoint(content, x, 1000);
CGContextStrokePath(content);
//x=x+192;
x=x+sizeOfCols;
}
[self initImageView];
UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panHandler:)];
[self addGestureRecognizer:panGesture];
// CGContextMoveToPoint(content, 20, 20);
// CGåContextAddLineToPoint(content, 50, 50);
//
// CGContextStrokePath(content);
}
- (void)panHandler:(UIGestureRecognizer *)sender{
CGPoint point=[sender locationInView:self];
if (sender.state == UIGestureRecognizerStateBegan) {
NSLog(@"BEgin");
UIView *v=[[UIView alloc]initWithFrame:CGRectMake(75, 75, 100, 100)];
v = [self hitTest:point withEvent:nil];
// UIImageView *imv=(UIImageView*)v;
[self addSubview:v];
}
if (sender.state == UIGestureRecognizerStateChanged) {
NSLog(@"moved");
}
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"end");
}
// NSLog(@"In Pan Handler");
}
@end