2015-11-05 46 views
1

我有一個iOS應用程序寫在Swift(2.1)。我使用了一個小小的解決方法,我發現它在NavigationBar中的UIBarButtonItem之間留出了較小​​的空白。這裏是我的代碼:UIButton與模板圖像接收觸摸事件只爲非透明像素

let modeImage = UIImage(named: modeFilename)!.imageWithRenderingMode(.AlwaysTemplate) 
    modeButton = UIButton(frame: CGRectMake(0, 0, 22, 22)) 
    modeButton.setBackgroundImage(modeImage, forState: .Normal) 
    modeButton.addTarget(self, action: Selector("modeClicked:"), forControlEvents:.TouchUpInside) 
    modeButton.transform = CGAffineTransformMakeTranslation(10, 0) 
    let modeButtonContainer = UIView(frame: modeButton.frame) 
    modeButtonContainer.addSubview(modeButton) 
    modeButtonItem = UIBarButtonItem(customView: modeButtonContainer) 

按鈕的作品,但我有一個正方形的簡單的圖像和觸摸僅在非透明像素的工作(或接近它們可能)。在模擬器上很難觸及它,更不用說真正的設備。這是一個真正的痛苦。我發現解決方案在modeButtonContainer上使用Tap Gesture Recognizer,但隨後按鈕沒有懸停,所以它不是最佳解決方案。

使用setImage而不是setBackgroundImage不會改變任何東西。創建類型爲UIButtonType.Custom的按鈕也一樣。

幫助!

回答

0

想通了!我的理論是錯誤的。這不是因爲透明像素。問題導致這一行:

modeButton.transform = CGAffineTransformMakeTranslation(10, 0) 

這導致按鈕10點來抵消而不是在它的容器的中心。按鈕看起來不錯,但是當我將背景設置爲modeButtonContainer時,我意識到按鈕只能在容器區域工作,並且不能在其外部工作。

所以,我需要刪除這條線,轉而使用rightBarButtonItems添加爲第一個項目:

let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
negativeSpacer.width = -10