2011-10-02 37 views
23

Tôi đang cố gắng tìm vị trí hiện tại của một ImageView trên iPhone hoạt ảnh trên màn hình.Truy cập vị trí hiện tại của UIView trong khi hoạt ảnh

tôi có thể tạo và animate IMAGExem như vậy

-(IBAction)button:(UIButton *)sender{ 
    UIImageView *myImageView =[[UIImageView alloc] initWithImage: 
            [UIImage imageNamed:@"ball.png"]];  
    myImageView.frame = CGRectMake(0, self.view.frame.size.height/2, 40, 40);  
    [self.view addSubview:myImageView]; 
    [myArray addObject:myImageView]; 

    [UIView animateWithDuration:.5 
          delay:0 
       options:(UIViewAnimationOptionAllowUserInteraction) // | something here?) 
        animations:^{ 
         myImageView.frame = CGRectOffset(myImageView.frame, 500, 0);  
        } 
        completion:^(BOOL finished){ 
         [myArray removeObject:myImageView]; 
         [myImageView removeFromSuperview]; 
         [myImageView release]; 
        } 
    ]; 
} 

sau đó để phát hiện các CGPoint hiện tại của IMAGExem tôi gọi phương pháp này mỗi 60 năm một giây

-(void)findPoint{ 

    for (UIImageView *projectile in bullets) {   
     label.text = [NSString stringWithFormat:@"%f", projectile.center.x]; 
     label2.text = [NSString stringWithFormat:@"%f", projectile.center.y]; 
    } 
} 

Tuy nhiên điều này chỉ mang lại cho tôi điểm mà hoạt ảnh kết thúc, tôi muốn lấy CGPoint hiện tại của hình ảnh đang hoạt hình trên màn hình. Có tùy chọn nào tôi cần áp dụng ngoài UIViewAnimationOptionAllowUserInteraction để thực hiện việc này không? Nếu không, làm thế nào để có được vị trí hiện tại của một imageView hoạt hình?

Trả lời

44

Bạn có thể sử dụng presentationLayer - thuộc tính của CALayer "cung cấp xấp xỉ gần đúng với phiên bản của lớp hiện đang được hiển thị". Chỉ cần sử dụng nó như thế này:

CGRect projectileFrame = [[projectile.layer presentationLayer] frame]; 
+0

Cảm ơn bạn !! điều này hoạt động hoàn hảo, khác với phương thức cảnh báo không tìm thấy '-presentationLayer'. Tôi có phải nhập khung không? – user975134

+0

đã nhận đượC#import cảm ơn một lần nữa !! – user975134

+0

hoàn toàn đủ để chấp nhận câu trả lời? :-) Có, tôi quên đề cập đến rằng bạn nên liên kết QuartzCore.framework và thêm một import #import , giống như bạn sẽ bất cứ khi nào bạn đối phó với CALayers. – adamsiton

-1

Dễ dàng hơn để thiết lập một KVO cho view.frame, như được nêu trong this answer. Bạn có thể kiểm tra giá trị mới để có được khung hình mới như một CGRect.

+1

Điều này dường như không hoạt động không may Tôi đã thử với các tùy chọn '[view.layer addObserver: self forKeyPath: @" frame ": NSKeyValueObservingOptionNew context: NULL];' và '[view addObserver: self forKeyPath: @" layer. frame "options: NSKeyValueObservingOptionNext mới: NULL];' – jrmgx

Các vấn đề liên quan