我有一個平面圖的UIImageView
當他點擊樓層平面圖的特定區域,它會顯示該地區的內部圖像什麼客戶想要做的是。 ..點擊時我沒有顯示該區域的問題。我的問題是要自己點擊的區域。看看我的初步實施:(我不知道這是否是正確的方法)iOS的 - 在UIImageView的點擊特定區域,並進行動作
主浴區有一個多餘的地方,我把一個按鈕的話,那麼當用戶點擊該區域,我將執行顯示內部圖像的動作...也在「步入式衣櫃」區域中,我有2個按鈕。
那麼,有沒有一種方法來優化這個實現?
我有一個平面圖的UIImageView
當他點擊樓層平面圖的特定區域,它會顯示該地區的內部圖像什麼客戶想要做的是。 ..點擊時我沒有顯示該區域的問題。我的問題是要自己點擊的區域。看看我的初步實施:(我不知道這是否是正確的方法)iOS的 - 在UIImageView的點擊特定區域,並進行動作
主浴區有一個多餘的地方,我把一個按鈕的話,那麼當用戶點擊該區域,我將執行顯示內部圖像的動作...也在「步入式衣櫃」區域中,我有2個按鈕。
那麼,有沒有一種方法來優化這個實現?
一種選擇是使用UITapGestureRecognizer
到ImageView的,那麼當手勢發射
- (IBAction)tap:(UITapGestureRecognizer*)sender {
CGPoint touchPoint = [sender locationInView:yourimageview];
//Then decide the point in which area to do different action
}
你說
點擊時,我沒有問題,顯示該區域。
重要的是要知道,如何顯示區域,因爲這可能是解決問題的關鍵。
如果您有一些路徑(CGPath,UIBezierPath)來確定要突出顯示的區域,則可以使用相同的路徑進行點擊測試。無論是在按鈕子類,UIView子類還是手勢識別器中。
即該代碼使用的層的掩蔽路徑,如果存在的話。當然,這可能有幾條路。
@implementation MyView
//
// ...
//
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGPoint p = [self convertPoint:point toView:[self superview]];
if(self.layer.mask){
if (CGPathContainsPoint([(CAShapeLayer *)self.layer.mask path], NULL, p, YES))
return YES;
}else {
if(CGRectContainsPoint(self.layer.frame, p))
return YES;
}
return NO;
}
@end
點擊手勢識別器只會在視圖內檢測到點擊。
同樣pointInside:withEvent:
將工作基於路徑的子類的UIButton。
我想你已經實現了合適的解決方案。沒有優化的方法來解決這種情況。您可以使用tapGestureRecognizer來代替按鈕,但在這種情況下,您必須創建那麼多識別器。 – iPhone