2012-03-17 29 views
9

Tôi đang triển khai các nhãn kéo/thả/thay đổi kích thước/xoay trong ứng dụng của mình. Cho đến nay mọi thứ đang hoạt động ngoại trừ cử chỉ UIRotationGestureRecognizer. Cụ thể hơn, nó không hoạt động với cử chỉ UIPinchGestureRecognizer.iPhone iOS làm thế nào để làm cho UIRotationGestureRecognizer và UIPinchGestureRecognizer để làm việc cùng nhau để mở rộng quy mô và xoay một UIView với subviews?

Thông thường hai cử chỉ cạnh tranh cho hai lần chạm ngón tay, vì vậy tôi đang chạy chúng song song. Dưới đây là 2 phương pháp của tôi mà trình nhận dạng cử chỉ gọi ra.

Khi thực hiện cử chỉ xoay, chế độ xem xoay tròn xung quanh trung tâm, với chiều cao và chiều rộng thay đổi như sau: chiều cao trở thành chiều rộng, chiều rộng từ từ chuyển thành chiều cao. Cuối cùng, khung nhìn biến mất.

Trong chế độ xem, tôi có một chế độ xem tự động thay đổi kích thước khác. Thông thường, cử chỉ chụm cũng tự động thay đổi kích thước các bản xem phụ, nhưng trong trường hợp này, các bản xem trước với các mặt nạ tự động biến mất. Các cuộc khảo sát có chiều cao và chiều rộng lò xo và trái/top strut.

Tôi đang làm gì sai? Làm cách nào để tôi có thể thay đổi kích thước và chia tỷ lệ UIView bằng cử chỉ?

Tất cả các phương thức và kết nối được ủy quyền đều được thiết lập đúng cách. Tôi cần phải hiểu cách xử lý thứ tự trong đó các trình nhận dạng sẽ áp dụng tỷ lệ và xoay vòng.

//makes 2 gesture recognizers behave together 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

- (IBAction)handleRotationFrom:(id)sender { 
    NSLog(@"Gesture rotation %.1f", rotationGestureRecognizer.rotation); 

//attempt to continuously rotate the label, starting with a remembered rotation  

    float rotation = atan2(activeCompanionLabelView.transform.b, activeCompanionLabelView.transform.a); 
    NSLog(@"existing rotation %.1f", rotation); 

// rotation = rotation<0?(2*M_PI)-fabs(rotation):rotation; 
    rotation +=rotationGestureRecognizer.rotation; 

    NSLog(@"*** gesture rotation %.1f sum: %.1f, saved: %.1f",rotationGestureRecognizer.rotation, rotation, activeCompanionLabelView.savedRotation); 
    activeCompanionLabelView.transform = CGAffineTransformMakeRotation((rotation)); 
    activeCompanionLabelView.savedRotation = rotation; 
} 

- (IBAction)handlePinch:(id)sender { 
    NSLog(@"pinch %.2f", pinchGestureRecognizer.scale); 

//resize, keeping the origin where it was before 

    activeCompanionLabelView.frame = CGRectMake(activeLabelContainerFrame.origin.x, activeLabelContainerFrame.origin.y, activeLabelContainerFrame.size.width*pinchGestureRecognizer.scale, activeLabelContainerFrame.size.height*pinchGestureRecognizer.scale);  



} 

Trả lời

10

Nếu bạn muốn hai gestureRecognisers để chạy song song (đồng thời) view bạn nên thực hiện <UIGestureRecognizerDelegate>.

Ngoài ra, bạn nên đặt đại biểu cho cả hai số gestureRecognizers.

rotationGestureRecognizer.delegate=self; 
pinchGestureRecognizer.delegate=self; 

Và bạn cũng nên thực hiện phương pháp shouldRecognizeSimultaneouslyWithGestureRecognizer::

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 
} 

Chú ý: nếu bạn có nhiều thì hai gestureRecognisers này trong thư mục view bạn đang gonna có thêm một số tính kiểm tra trong phương pháp này.

EDIT:

Chỉ cần tìm thấy bài viết Ole Begemann về chủ đề này: Gesture Recognition on iOS with Attention to Detail

+0

Tôi đã có mã này tại chỗ. Tôi đã làm rõ câu hỏi với thông tin này. –

+0

@ AlexStone: tôi hiểu rồi. Tôi không ở mac của tôi tại thời điểm này nhưng sẽ cần phải làm một số xét nghiệm với điều này. Tôi có thể thêm vào câu trả lời của tôi nếu không có ai khác tiến lên phía trước. –

+0

Tôi đã cùng một prob bây giờ .. bạn đã nhận được một giải pháp này? – Prathiba

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