2011-09-10 34 views
28

Büyük bir UIButton var, bu bir UIButtonTypeCustom ve düğme hedefi UIControlEventTouchUpInside için çağrıldı. Sorum, UIButton'daki dokunmanın nerede oluştuğunu nasıl belirleyebilirim. Bu bilgiyi istiyorum, böylece dokunmatik konumdan bir pop-up görüntüleyebilirim. Denediğim şey şu:UIButton TouchUpInside Dokunma Konumu

UITouch *theTouch = [touches anyObject]; 
CGPoint where = [theTouch locationInView:self]; 
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y); 

ve diğer çeşitli yinelemeler. düğmenin hedef yöntemi sender yoluyla ondan bilgi almak: button.touchUpLocation:

UIButton *button = sender; 

Yani böyle bir şey kullanabilirsiniz herhangi bir yolu var mı?

Çevrimiçiydim ve buna benzeyen bir şey bulamadım bu yüzden şimdiden teşekkürler.

+0

hiçbir touchUpLocation yoktur, UIButton sen alamayan bir kontrolüdür UIButton konumunu tıklayın. http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIButton_Class/UIButton/UIButton.html –

+1

Tam anlamıyla touchUpLocation demek istemedim, – Andrew

+2

@ Praveen-K gibi bir şey ifade ettim . UIKit, eylemi tetikleyen UIEvent'i ikinci bir parametre alan eylemleri destekler. Bundan dokunuşların listesini alabilir ve her dokunuşun bir konumu vardır. Aşağıda yayınladığım kodu görün. Bununla birlikte, UIButton'un son tıklamanın yerini döndüren bir yöntemi yoktur. – Caleb

cevap

56
UITouch *theTouch = [touches anyObject]; 
CGPoint where = [theTouch locationInView:self]; 
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y); 

Bu kod, bu kodun muhtemelen görünüm denetleyicinizdeki bir eylemin içinde olması dışında doğru bir fikirdir, değil mi? Eğer öyleyse, self, düğmeyi değil, denetleyiciyi ifade eder. Düğmeye bir işaretçiyi -locationInView: içine geçirmelisiniz.

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event 
{ 
    UIView *button = (UIView *)sender; 
    UITouch *touch = [[event touchesForView:button] anyObject]; 
    CGPoint location = [touch locationInView:button]; 
    NSLog(@"Location in button: %f, %f", location.x, location.y); 
} 
+1

Sorunumu tamamen çözdüğünüz için teşekkürler. Yapamayacağını düşündüm, bu harika. – Andrew

+1

Ne büyük bir kod parçacığı - bazen bu şeyler insan doğasına olan inancınızı yeniden teyit eder. :-) – SomaMan

+0

Olayı - - (IBAction) düğmesinden yazdırmanın bir yolu var mı? (Id) gönderen ...? (Yani, çok büyük bir projem var ve bunu yapmak için, tüm düğmeleri değiştirmeden "... için:", "Yapabilirsem" diyebilirim.) Teşekkürler! – Olie

0

Düğmenize bir jest tanıyıcı eklemeye çalıştığınız oldu mu?

+0

Bunu deneyimlemedim çünkü jest tanıyıcılarla geçmişteki deneyimlerimde, alt görüntülerle çalışmıyorlar. Eminim yanlış bir şey yapıyordum. Ama bir jest durumu gibi görünmüyordu. Bir düğmeye basıldığında, düğmenin ne zaman itildiğini bilmek istemedim. Ama cevabınız için teşekkürler – Andrew

+0

@ Jean-Denis Muys Önerinizin ayrıntılarını vermeyecekseniz bu cevap bir yorum olmalı. Ayrıca, bu durumda yukarı-cevap cevabı daha uygun olduğunu düşünüyorum, ancak bir jest tanıyıcı ek olarak sadece bir çözüm olarak olmalıdır. Doğru şekilde ayarlanmışlar, bir olayı kullanarak aynı şekilde çalışmalıdırlar. Ayrıca –

4

Swift 3.0 için: Burada

Eğer görünümü denetleyicisi deneyebileceğiniz test eylem var

@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) 
{ 
     let myButton:UIButton = sender as! UIButton 
     let touches: Set<UITouch>? = event.touches(for: myButton) 
     let touch: UITouch? = touches?.first 
     let touchPoint: CGPoint? = touch?.location(in: myButton) 
     print("touchPoint\(touchPoint)") 
}