как да накарате gesturerecognizer да работи в анимиран изглед на UIImage

имам 5 анимирани изображения в изглед на изображение и бих искал да позволя на потребителя да ги докосне на базата на ID по подразбиране и да го премести в друг изглед. Опитах се да добавя докосване с жестове, но изображението не се открива.

може ли някой да ми даде съвет?

РЕДАКТИРАНЕ: в крайна сметка не го използвах, вместо това зададох UIButton.

Благодаря ти :)

viewDidLoad

self.defaultID = [[NSMutableArray alloc] initWithObjects:@"7",@"9",@"11",@"27",@"6",nil];
self.defaultImageCaption = [[NSMutableArray alloc] initWithObjects:@"Ver",@"Green",@"Red",@"CF",@"Dwarf",nil];

//default image
imageViewTop.alpha = 1.0;
imageViewBottom.alpha = 0.0;
imageViewBottom = [[UIImageView alloc] initWithFrame:CGRectMake(0,44,320,367)];
imageViewTop = [[UIImageView alloc] initWithFrame:CGRectMake(0,44,320,367)];

singleDefaultTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDefaultTap:)];
singleDefaultTap.numberOfTouchesRequired = 1;
imageViewTop.userInteractionEnabled = YES;
[imageViewTop addGestureRecognizer:singleDefaultTap];
imageViewTop.tag = 2000;

UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0,44,320,367)];
[topView addSubview:imageViewTop];
[self.view addSubview:imageViewTop];
[self.view addSubview:topView];
[self.view addSubview:imageViewBottom];

[self nextAnimation]

-(void)nextAnimation{

//picture loop
imageViewTop.image = imageViewBottom.image;
imageViewBottom.image = [imageArray objectAtIndex:[imageArray count] - 1];

[imageArray insertObject:imageViewBottom.image atIndex:0];
[imageArray removeLastObject];
imageViewTop.alpha = 1.0;
imageViewBottom.alpha = 0.0;

[UIView animateWithDuration:4.0
                 animations:^{ 
                     imageViewTop.alpha = 0.0;
                     imageViewBottom.alpha = 1.0;
                     } 
                 completion:^(BOOL  completed){
                     [self nextAnimation:stringsize.width];
                 }
 ]; 

действие

//покажете вашия сигнал...

NSLog(@"tapped");

flowerDetails = [[FlowerDetailViewController alloc] initWithNibName:@"FlowerDetailViewController" bundle:Nil] ;
Fr *fr = nil;

//натискане към детайлен изглед на цвете


person Desmond    schedule 01.12.2011    source източник


Отговори (3)


Това е така, защото когато се прилага анимация, модификацията за която и да е стойност на спрайта (UIImageView във вашия случай) чрез анимация не се прилага към оригинала на спрайта, тя се прилага към неговия .layer.presentationLayer, истинският все още е в своето оригинално място. В този случай можете да опитате следното: Поставете жеста си на целия екран, когато дойде отговор от събитие, проверявате точката на докосване, правите hitTest на презентационния слой, ако да, тогава правете каквото искате.

Обикновено използвам кода по-долу, за да направя това.

- ( BOOL ) areYouThere: ( CGPoint ) point {
    return ( [ ( ( CALayer * )sprite.layer.presentationLayer ) hitTest: point ] != nil );
}

Вземете точката на докосване от UITouch обект, когато се извика методът по-долу

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
person GeFo.GT    schedule 01.12.2011

Бих добавил прозрачен изглед върху изгледа на изображението и бих добавил разпознавател на жестове към него.

person dasdom    schedule 01.12.2011
comment
виждам как да предам стойността въз основа на прозрачния изглед? - person Desmond; 01.12.2011
comment
Не разбирам въпроса ти. - person dasdom; 01.12.2011

Наистина късно, но се сблъсках със същия проблем и намерих това, което според мен е по-добро решение:

Просто използвайте опцията UIViewAnimationOptionAllowUserInteraction така:

[UIView animateWithDuration:4.0
                      delay:0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{ 
                     imageViewTop.alpha = 0.0;
                     imageViewBottom.alpha = 1.0;
                 } 
                 completion:^(BOOL  completed){
                     [self nextAnimation:stringsize.width];
                 }
];
person Johann Fradj    schedule 18.06.2015