2011-10-24 25 views
6

Hầu như không có thông tin trên mạng về vấn đề này, vì vậy đây là vấn đề của tôi:iOS Liễu (Auto) offset trên iPad

Tôi đang làm việc trên một máy nghe 2 'ngồi đối diện với eachother' ipad trò chơi và máy nghe nhạc những người ở phía đối diện có một thời gian khó khai thác các nút ... bởi vì nó xuất hiện rằng Apple tự động thay đổi cảm ứng dựa trên định hướng thiết bị (đó là tuyệt vời để sử dụng thường xuyên hoặc các cầu thủ chính). Có cách nào để thiết lập lại nó hoặc nói với ipad không làm điều đó? (Btw iPhone thực hiện điều này quá)

Đây là tất cả những gì tôi đã tìm thấy: Với sự không thống nhất rõ ràng này, tôi đã quyết định chỉ lừa nó bằng cách mở các phần chuyển động '' để có một khu vực cho người dùng nhấn bên dưới khu vực của phần. Nhìn chung, người dùng dường như nhấn bên dưới một đối tượng chứ không phải ở trên nó - vì vậy đừng để ý đến sự dịch chuyển do iOS gây ra.

Vì vậy, nếu không có cách dễ dàng để ngăn chặn bù đắp, là giải pháp duy nhất để thay đổi giới hạn của mỗi uiview (hoặc phân lớp) cho người chơi đối diện? Hay điều đó có đúng không?

Bất kỳ câu trả lời nào được đánh giá cao.

Trả lời

3

EDIT: Omg các bạn cuối cùng tôi đã tìm được cách! Tôi đã tạo một lớp con của UIView và thực hiện chế độ xem trò chơi của tôi (nơi chứa tất cả UIScrollViews, UIButtons, v.v.) sử dụng lớp con đó. Và sau đó điều này là mã duy nhất tôi bổ sung vào lớp con:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint touchSpot = point; 
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"] && touchSpot.y < 512) 
    { 
     touchSpot = CGPointMake(touchSpot.x, touchSpot.y+10); 
    } 

    UIView *hitView = [super hitTest:touchSpot withEvent:event]; 

    if (hitView == self) 
     return self; // you can return nil here if you want touches to go through this view (ie transparent space in a HUD overlay or w/e) 

    return hitView; 
} 

Cho đến nay điều này đã làm việc độc đáo ... những người ngồi ở đầu đối diện có phản ứng cảm ứng tốt giống như các cầu thủ ở phía bên "nhà" . Cảnh giác với những trình bày quan điểm trên quan điểm này mặc dù ... tất cả mọi thứ sẽ đi qua phương pháp mà ...

giải pháp cũ (trước khi tôi nhận ra điều đó ^):

Vâng, ngay bây giờ giải pháp của tôi có đến lớp con uigesturerecognizer, chuyển tiếp BẤT CỨ liên lạc (tức là không có ràng buộc trên recognizer), sau đó thêm nó vào tầm nhìn của trò chơi của tôi. Sau đó, phương thức phản ứng với bất kỳ chạm nào chỉ chạy khi trạng thái được kết thúc, và nếu có, nó sẽ tiến hành lặp qua mọi chế độ xem phụ (không nhiều) để xem chạm có bị chạm không. Ngoài ra, đối với người chơi đối diện nó so sánh rect offsetted một chút (đối với mỗi subviews).

Tôi sẽ xem liệu tôi có thể tìm được cách hiệu quả hơn không ... nhưng cho đến nay vẫn ổn.

Tôi cũng có thể làm cho trò chơi của tôi xem lớp con uiview và ghi đè lên/di chuyển/kết thúc nhưng tôi đã có tất cả được đặt ra, vì vậy tôi đã đi với trình nhận dạng (do đó không phải phân lớp uiview).

3

Có, bù đắp cảm ứng không tồn tại, kích thước của nó không được ghi lại và không thể hủy (ít nhất, với API công khai).

Bạn phải đảo ngược kỹ sư bù đắp chính nó. Tôi sẽ chỉ hiển thị một vòng tròn nhỏ, nơi UIKit nói liên lạc là, và sau đó điều chỉnh nó bằng thử và sai. Khi bạn có bù đắp, bạn có thể tự áp dụng nó (-2 * bù đắp) trong các trình xử lý sự kiện cho người chơi đối diện duy nhất.

Tôi không thể biết nó sẽ như thế nào cảm thấy, bạn phải thử nghiệm một chút.

+0

Quyền đối với lần chạm Tôi theo dõi bản thân mình Tôi có thể làm điều đó, nhưng điều gì về UIButtons hoặc nội dung trên bảng nhìn mà không có nhiều quyền kiểm soát của tôi? Họ đã loại bỏ một liên lạc bị mất.Bất cứ đề nghị cho điều này? Cảm ơn. – cclogg

+0

Để ảnh hưởng đến tất cả các lần chạm, bạn sẽ phải ghi đè lên 'sendEvent:' ở cấp UIWindow/UIApplication, nhưng bạn không thể sửa đổi UITouches. Vấn đề ở đây là để "sửa chữa" máy móc điều chỉnh cảm ứng của Apple (rất có thể xảy ra ở cấp độ trình điều khiển) * ở mọi nơi * bạn phải sử dụng các API riêng như được mô tả ở đây: http://cocoawithlove.com/2008/10/ synthesizing-touch-event-on-iphone.html, nhưng tôi sẽ không khuyên bạn nên nó vì nó là một * rất, rất * nguy hiểm hack. – Costique

+0

Darn được. Tôi đang xem xét các giới hạn của một khung nhìn ... Tôi tự hỏi liệu tôi có thể tắt cắt, sau đó bù đắp giới hạn của khung xem -10 pixel và sau đó bù đắp khung hình của khung hình xuống +10 pixel (khung hình cho người chơi thứ 2). Mặc dù mọi thứ va chạm/vị trí tôi phải nhớ để kiểm tra -10 pixel trên khung. – cclogg

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