#ios #ios4 #uiimageview
#iOS #ios4 #uiimageview
Вопрос:
я добавил около 15-16 UIImageViews в свой просмотр, используя следующий код
- (void) setUpCellsUsingImage: (UIImage *) masterImage
{
rows = 4;
cols = 4;
containerCellHeight=hight/4;
containerCellWidth=width/4;
NSInteger row, col;
CGImageRef tempSubImage;
CGRect tempRect;
CGFloat yPos, xPos;
UIImage * aUIImage;
UIImageView *label;
cellArray = [[NSMutableArray new] autorelease];
int i =0;
for (row=0; row < rows; row ) {
yPos = row * containerCellHeight;
for (col=0; col < cols; col ) {
xPos = col * containerCellWidth;
label = [[UIImageView alloc]init];
tempRect = CGRectMake(xPos, yPos, containerCellWidth, containerCellHeight);
tempSubImage = CGImageCreateWithImageInRect(masterImage.CGImage, tempRect);
aUIImage = [UIImage imageWithCGImage: tempSubImage];
imgView = [[UIImageView alloc] initWithImage:aUIImage];
imgView.tag =i;
i ;
NSLog(@"original tags = %d",label.tag);
[cellArray addObject: aUIImage];
aUIImage = nil;
CGImageRelease(tempSubImage);
}
}
}
теперь я знаю, что могу определить, какой imageview был затронут с помощью тега ImageView, но я не знаю, как проверить наличие тегов в методе touchesBegan.. что я могу сделать, чтобы дифференцировать uiimageview на основе касания??
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:imgView];
NSLog(@"touch %@",imgView.tag);
}
новый код:
- (void) setUpCellsUsingImage: (UIImage *) masterImage
{
rows = 4;
cols = 4;
containerCellHeight=hight/4;
containerCellWidth=width/4;
NSInteger row, col;
CGImageRef tempSubImage;
CGRect tempRect;
CGFloat yPos, xPos;
UIImage * aUIImage;
UIImageView *label;
cellArray = [[NSMutableArray new] autorelease];
int i =0;
for (row=0; row < rows; row ) {
yPos = row * containerCellHeight;
for (col=0; col < cols; col ) {
xPos = col * containerCellWidth;
label = [[UIImageView alloc]init];
tempRect = CGRectMake(xPos, yPos, containerCellWidth, containerCellHeight);
tempSubImage = CGImageCreateWithImageInRect(masterImage.CGImage, tempRect);
aUIImage = [UIImage imageWithCGImage: tempSubImage];
imgView = [[UIImageView alloc] initWithImage:aUIImage];
[self.view addSubview:imgView]; // i add the uiimageview here
imgView =CGRectMake(xPos, yPos, containerCellWidth-1, containerCellHeight-1);
imgView.tag =i;
i ;
NSLog(@"original tags = %d",label.tag);
[cellArray addObject: aUIImage];
aUIImage = nil;
CGImageRelease(tempSubImage);
}
}
}
- (void)viewDidLoad {
UIImage *mImage = [UIImage imageNamed:@"menu.png"];
hight = mImage.size.height;
width = mImage.size.width;
[self setUpCellsUsingImage:mImage];
[`super viewDidLoad];`
}
Комментарии:
1. Вы хотели бы узнать, какой вид изображения был затронут, верно?
Ответ №1:
Пожалуйста, попробуйте это:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:imgView];
UIView *hitView = [self.view hitTest:location withEvent:event];
NSLog(@"hitView %@",hitView);
UIImageView *hitImageView = nil;
if([hitView isKindOfClass:[UIImageView class]]) {
hitImageView = (UIImageView *)hitImageView;
}
NSLog(@"touched %@", hitImageView);
}
Комментарии:
1. нет, все еще не работает.. нельзя ли дифференцировать imgview на основе тега??
2. @hemant, есть ошибки? У меня нет вашего кода, поэтому я не могу понять, что не так. Содержит ли hitView что-либо, пожалуйста, отправьте NSLog. Я добавлю несколько журналов отладки в код. И у меня была опечатка в последнем сообщении журнала, исправил ее.
3. пробовал использовать ваш код, таких ошибок нет, но в журналах hitview и touched отображается нулевое значение
4. @hemant можете ли вы показать мне код, как вы добавляете ImageViews в свой view? Содержит ли self.view их супер-представление?
5. код, который я использую, почти такой же, как указано выше, но я все еще публикую его под новым кодом в моем вопросе
Ответ №2:
Вы можете использовать UIGestureRecognizers начиная с iOS 3.2. Я бы рекомендовал использовать один UIImageView для имеющегося у вас меню и добавить UITapGestureRecognizer для обнаружения одиночных нажатий. Затем используйте locationInView в действии, чтобы увидеть, к какому месту изображения прикоснулся пользователь.
...
UITapGestureRecognizer *tapRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(menuSelect:)];
[imageView addGestureRecognizer:tapRecognizer];
[tapRecognizer release];
}
- (void)menuSelect:(UIGestureRecognizer *)gesture {
// get location CGPoint for touch from recognizer
}
Это ссылка на очень полезное руководство Apple по распознавателям.