2010-03-11 37 views
5

Tôi chỉ nhận được tuyên bố với sự phát triển của iPhone và dường như không thể tìm thấy câu trả lời tôi đang tìm kiếm những gì tôi muốn làm.chạm vào trình xử lý sự kiện cho UIImageView

Dường như tôi có thể tạo một UIImageView theo lập trình và sau đó thiết lập trình xử lý sự kiện cho các chức năng cảm ứng của nó.

trong C# i sẽ có thứ gì đó trông giống như

Nút b = new Button(); b.Click + = mã xử lý của tôi

ngay bây giờ tôi có điều này

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 

myImage.userInteractionEnabled = YES; 
[myImage setImage:[UIImage imageNamed:@"myImage.png"]]; 
myImage.opaque = YES; // explicitly opaque for performance 
[self.view addSubview:myImage]; 
[myImage release]; 

gì tôi cần phải làm gì để ghi đè lên các sự kiện liên lạc?

nhờ

Trả lời

9

Trong khi nó không phải là câu trả lời hoàn chỉnh cho câu hỏi của bạn, tôi nghĩ rằng giải pháp sau đây có thể được tốt hơn sau đó làm "vô hình-button-workaround" .. chỉ đơn giản là phân lớp từ UIImageView và ghi đè lên các phương pháp sau đây:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

//your UIImageView has been touched :) 

//event -> "A UIEvent object representing the event to which the touches belong." 

//touches -> "A set of UITouch instances in the event represented by event that represent the touches in the UITouchPhaseEnded phase." 

} 

hy vọng điều này sẽ giúp ...

+0

Thực sự đây không phải là câu trả lời tôi đang tìm kiếm.Nhưng có vẻ như cách duy nhất tôi có thể tìm thấy là sử dụng thừa kế. Tôi đoán C# đã làm hỏng tôi đến mức mà tôi nghĩ rằng các phương pháp như thế này nên có sẵn mà không có nhiều công việc. Tuy nhiên, cảm ơn. – madmik3

0

tôi đã không tìm thấy một cách để làm điều đó trực tiếp với UIImageView. Nhưng nếu bạn phân lớp nó và ghi đè phương thức nextResponder để trả lại một đại biểu dưới sự kiểm soát của bạn, bạn có thể làm những gì bạn đang theo sau. Phơi bày các đại biểu như là một tài sản của phân lớp và sau đó bạn có thể vượt qua trong một đại biểu cho các sự kiện liên lạc và thay đổi nó bất cứ lúc nào.

0

Tôi đã nhìn thấy các câu trả lời khác đề xuất đặt nút ẩn bên dưới UIImageView, đặt chế độ xem hình ảnh thành userInteractionEnabled: NO và cho phép các thao tác chạm vào nút.

3

Chỉ cần sử dụng UIButton tùy chỉnh có hình ảnh làm hình nền.

5

Tôi có chế độ xem chính với một số biểu tượng như "giới thiệu" để mở chế độ xem. Trong bộ điều khiển tương ứng (chế độ xem chính), tôi đã thêm một trình xử lý sự kiện cho touchesBegan. Hơn nữa, tôi cần kiểm tra chế độ xem nào đã được "chạm", vì có nhiều biểu tượng hơn trên chế độ xem. Ví dụ UIImageView của tôi là "aboutImg" và cần phải kiểm tra tương tác của người dùng (nghĩa là trình tạo giao diện người dùng -> thuộc tính thanh tra chế độ xem).

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == aboutImg){ 
     [self ShowAbout]; 
    } 
} 

Đảm bảo bạn kiểm tra "Đã bật Tương tác người dùng". Đây là giải pháp đơn giản nhất

+0

Đây là giải pháp dễ nhất. Tôi kiểm tra hộp kiểm Tương tác người dùng và đã ném nó vào UITableViewCell được phân lớp để lấy các chạm chạm vào trong ô. Làm việc hoàn hảo và dễ dàng. Ne cần phải phân lớp UIImageView –

0

Bạn cần gì để làm với UIImageView, Bạn có thể sử dụng UIButton với kiểu tùy chỉnh và thêm cảm ứng bên trong hành động để nó ... thiết setImage button.imageview: ví dụ:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame 
UIImage *img = [UIImage imageNamed:@"myimage.png"]; 
[button setImage:img forState:UIControlStateNormal]; 

Nếu bạn muốn sử dụng UIImageView, bạn cần phải thêm cử chỉ vào số lần xem hình ảnh của mình. bạn có thể phân lớp UIImageView của bạn và sau đó sử dụng các sự kiện chạm.

0

Cách dễ nhất để thêm sự kiện onClick vào UIImageView hoặc vào UIView là thêm trình nhận dạng cử chỉ nhấn vào nó.

UIImage *myImage = [UIImage imageNamed:@"myImage.png"]; 
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage]; 

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)]; 
singleTap.numberOfTapsRequired = 1; 
singleTap.numberOfTouchesRequired = 1; 
[self.myImageView addGestureRecognizer:singleTap]; 
[self.myImageView setUserInteractionEnabled:YES]; 
Các vấn đề liên quan