2013-03-30 1 views
1

У меня есть анимация, и она непрерывно проходит по экрану. Теперь я пытаюсь получить предупреждение, когда вы касаетесь анимации в определенной части экрана.Как сделать оповещение, когда анимация достигает определенной точки на экране. Objective C

В настоящее время я дошел до того, что если вы коснетесь середины экрана, вы получите предупреждение.

SelectedCellViewController.h

#import <Accounts/Accounts.h> 
#import <QuartzCore/QuartzCore.h> 

@interface SelectedCellViewController : UIViewController { 
IBOutlet UIImageView *rocket; 
} 

@end 

SelectedCellViewController.m

#import "SelectedCellViewController.h" 

@interface SelectedCellViewController() 

@end 

@implementation SelectedCellViewController 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
} 
return self; 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad { 

[super viewDidLoad]; 

[self performSelector:@selector(imageSpawn:) withObject:nil afterDelay:3]; 

    } 


    - (void) imageSpawn:(id) sender 
    { 

     UIImage* image = [UIImage imageNamed:@"ae"]; 
     rocket = [[UIImageView alloc] initWithImage:image]; 
     rocket.frame = CGRectMake(-25, 200, 25, 40); 
     [UIView animateWithDuration:5 
         delay:0.2f 
        options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse 
       animations:^(){rocket.frame=CGRectMake(345, 200, 25, 40);} 
       completion:^(BOOL fin) { 
       }]; 

    UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(ballTapped:)]; 
tapped.numberOfTapsRequired = 1; 
[self.view addGestureRecognizer:tapped]; 
[self.view setUserInteractionEnabled:YES]; 
[self.view addSubview:rocket]; 

} 

-(void)ballTapped:(UIGestureRecognizer *)gesture 
{ 

// [rocket.layer removeAllAnimations]; 
NSLog(@"Tag = %d", gesture.view.tag); 

CGPoint location = [gesture locationInView:gesture.view]; 

rocket.frame = CGRectMake (location.x, location.y, 25,40);

CGPoint location1 = [gesture locationInView:gesture.view]; 
CGRect rectToCompare = CGRectMake(10.0f, 200.0f, 200.0f, 42.0f); 

if (CGRectContainsPoint(rectToCompare, location1)) { 

    //trigger an event. 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tapped row!" 
                message:[NSString stringWithFormat:@"Shot"] 
                delegate:nil 
              cancelButtonTitle:@"Yes, I did!" 
              otherButtonTitles:nil]; 
    [alert show]; 
} 

} 

- (void)viewDidUnload { 

} 

@end 

ответ

1

Чтобы получить значения для просмотра атрибутов в середине анимации, вы должны использовать вид слоя presentationLayer. Как documentation states:

Объект слоя, возвращаемый этим методом, обеспечивает близкое приближение к уровню, который в настоящее время отображается на экране. Пока выполняется анимация, вы можете получить этот объект и использовать его для получения текущих значений для этих анимаций.

Таким образом, вы можете использовать view.layer.presentationLayer.frame где view ваш UIImageView, чтобы получить текущее местоположение анимации слоя на экране. Используя это, тривиально проверять, находится ли кадр в пределах границ, которые вы хотите обнаружить.

Смежные вопросы