Я создаю приложение с карточками. В моей mainViewController, у меня есть этот код:идентифицировать касания подкласса UIView, созданного программно в iOS
CardView *cardView = [[CardView alloc] initWithFrame:CGRectMake(0, 0, CardWidth, CardHeight)];
cardView.card = [player.closedCards cardAtIndex:t];
[self.cardContainerView addSubview:cardView];
[cardView animateDealingToBottomPlayer:player withIndex:t withDelay:delay];
delay += 0.1f;
где CardView является подкласс UIView. Каждая карта представляет собой уникальный cardView и в CardView.m. У меня есть:
@implementation CardView
{
UIImageView *_backImageView;
UIImageView *_frontImageView;
CGFloat _angle;
}
@synthesize card = _card;
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
self.backgroundColor = [UIColor clearColor];
[self loadBack];
self.userInteractionEnabled=YES;
}
return self;
}
- (void)loadBack
{
if (_backImageView == nil)
{
_backImageView = [[UIImageView alloc] initWithFrame:self.bounds];
_backImageView.image = [UIImage imageNamed:@"Back"];
_backImageView.contentMode = UIViewContentModeScaleToFill;
[self addSubview:_backImageView];
}
}
и реализации для других функций.
Поскольку для того, чтобы выиграть место, одна карта помещается поверх других (половина карты видна, а остальная часть покрыта следующей картой и т. Д.), Я хочу определить штрихи на каждой карте.
Если я помещаю этот код в CardView:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Card is touched");
}
она никогда не называется. Если я поместил его в GameView Controller, он называется где угодно, я коснусь его, но я не знаю, как определить, какой cardView вызывается. Можете ли вы дать мне подсказку?
EDIT: Я решил использовать жесты. Поэтому в моем mainViewController был изменен код:
for (PlayerPosition p = startingPlayer.position; p < startingPlayer.position + 4; ++p)
{
CardView *cardView = [[CardView alloc] initWithFrame:CGRectMake(0, 0, CardWidth, CardHeight)];
cardView.card = [player.closedCards cardAtIndex:t];
cardView.userInteractionEnabled=YES;
[self.cardContainerView addSubview:cardView];
[cardView animateDealingToBottomPlayer:player withIndex:t withDelay:delay];
delay += 0.1f;
UITapGestureRecognizer *recognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cardSelected:)];
[cardView addGestureRecognizer:recognizer];
}
но это никогда не называется.
-(void)cardSelected:(UITapGestureRecognizer *)recognizer
{
NSLog(@"Card Selected with gestures");
}
Почему?
EDIT 2:
Я также попытался добавить это:
self.cardContainerView.userInteractionEnabled=YES;
или это изменить:
UITapGestureRecognizer *recognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cardSelected:)];
к этому:
UITapGestureRecognizer *recognizer=[[UITapGestureRecognizer alloc]initWithTarget:self .cardContainerView action:@selector(cardSelected:)];
, но никто из них не работал.
Вы считали распознаватели жеста? – Wain
@Wain Я не использовал их раньше, чтобы быть честным, и я не знал, как реализовать. Считаете ли вы, что это будет проще? – ghostrider
Это может быть не самый лучший способ, но вы можете получить x и y касания, и если у вас есть кадр каждой карты, вы можете увидеть, какой из них был затронут. Я бы рекомендовал распознаватели жестов. –