2012-02-19 45 views
6

tôi biết cách thêm trình nhận dạng cử chỉ qua IB nhưng tôi đang cố gắng tìm hiểu bằng cách sử dụng IB.thêm gesturerecongnizer theo chương trình

Vì vậy, về cơ bản những gì có ngay bây giờ là

blue1.userInteractionEnabled = YES; 
UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] 
           initWithTarget:self action:@selector(handlePan:)]; 

[blue1 addGestureRecognizer:pgr]; 
[pgr release]; 

và handlePan của tôi là

-(IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 

    CGPoint translation = [recognizer translationInView:self.view]; 

    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); 

    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

} 

này làm việc tốt nếu tôi làm điều đó trong vòng IB và tôi có thể phim các mảnh xung quanh.

Tôi không hiểu điều gì khiến nó không di chuyển giống như được mã hóa ngay bây giờ.

Mọi trợ giúp đều được đánh giá cao.

Tôi cũng đã thử - (void) thay vì - (IBAction) trong handlePan của tôi nhưng điều đó không hoạt động.

+0

Đoạn mã đầu tiên của bạn ở đâu? Nó có trong phương thức 'init' ở đâu đó không? – dasblinkenlight

+0

phân đoạn mã đầu tiên là một phương thức được gọi từ viewdidload. Đó là một phương pháp mà tôi muốn chạy ngay khi lượt xem. –

+0

Tại sao bạn viết '[pgr release];'? Có phải bạn không sử dụng ARC cho ví dụ này hay là điều gì đó cần thiết khi tạo và thêm trình gesturerecognizer? –

Trả lời

5

Thực tế là điều này hoạt động trong IB, nhưng không có trong mã cho thấy rằng lỗi nằm trong khối mã đầu tiên. Sự nghi ngờ của tôi là blue1nil. Đảm bảo rằng bạn không cố sửa đổi chế độ xem trước viewDidLoad. Tất cả chúng sẽ là nil trong initWithFrame:awakeFromNib.

+0

Cảm ơn, hóa ra tôi đã gọi phương thức này trước khi tôi đặt một biến khác thành true nên nó bỏ qua phần này vì biến khác đó là sai. –

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