1. 程式人生 > >iOS:UIButton擴大按鈕的響應區域

iOS:UIButton擴大按鈕的響應區域

#import "UIButton+EnlargeTouchArea.h"
#import <objc/runtime.h>
 
@implementation UIButton (EnlargeTouchArea)
 
static char topNameKey;
static char rightNameKey;
static char bottomNameKey;
static char leftNameKey;
 
- (void)setEnlargeEdge:(CGFloat) size
{
    objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, 
&rightNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); }
- (void) setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) right bottom:(CGFloat) bottom left:(CGFloat) left { objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self,
&bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC); } - (CGRect) enlargedRect { NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey); NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey); NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey); NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey); if (topEdge && rightEdge && bottomEdge && leftEdge) { return CGRectMake(self.bounds.origin.x - leftEdge.floatValue, self.bounds.origin.y - topEdge.floatValue, self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue, self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue); } else { return self.bounds; } } - (UIView*) hitTest:(CGPoint) point withEvent:(UIEvent*) event { CGRect rect = [self enlargedRect]; if (CGRectEqualToRect(rect, self.bounds)) { return [super hitTest:point withEvent:event]; } return CGRectContainsPoint(rect, point) ? self : nil; } @end

相關推薦

iOSUIButton擴大按鈕響應區域

#import "UIButton+EnlargeTouchArea.h" #import <objc/runtime.h> @implementation UIButton (EnlargeTouchArea) static char topNameKey; static char r

iOSUIButton圖片image不被拉伸(ContentMode)

有時使用UIButton即想美觀又想簡便,因此可以用以下方式既能使UIButton的背景圖片(準確的將是UIButton的imageView的image)可以像imageView那樣可控制 [bt s

工具類點選擴大點選區域

package com.sikkha.skline.utils; import android.graphics.Rect; import android.view.TouchDelegate; import android.view.View; /** * =================

對MFC程式的一點逆向分析定位按鈕響應函式的辦法

因為訊息響應函式儲存在AFX_MSGMAP_ENTRY陣列中, 觀察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到程式碼段基址0x401000,函式地址0x403140, 在WinDbg中執行!address命令,找到程式碼段的記憶體位置

ios點選tabbar中間按鈕彈出選單(swift 3實現)

先上一張圖看看效果: 最近在自學swift3,就用swift3重寫了這個小demo,在專案開發中像這種彈出選單使用的機率還是很大的,在這裡僅僅做一個簡單的分享,本例子中沒有難度大高深的程式碼,純屬練練手,如有不嚴謹的地方,還請多多指正! 下面mark一下

HITEST使用擴大點選區域 超出父檢視響應點選事件

點選螢幕或者點選一個btn會發生什麼? 傳遞鏈  響應者鏈。 在響應連中在找到最合適的響應者需要經過以下兩個方法: 這兩個方法的作用:尋找最適合的View 1.hitTest方法 引數:當前手指所在的點和產生的事件 返回值:返回誰, 誰就是最適合的View. 什

iOS造輪子」之UIButton 用Block響應事件

俗語說 一個不懶的程式設計師不是好程式設計師 造輪子,也只是為了以後更好的coding。 coding,簡易明瞭的程式碼更是所有程式設計師都希望看到的 無論是看自己的程式碼,還是接手別人的程式碼 都希望一看都知道這程式碼是幹嘛的。。 UI開發中用得最多的控制元件之一的UIButton,大家都知道其繼承於UIC

iOS上怎樣讓按鈕(UIbutton)文字左對齊展示

// button.titleLabel.textAlignment = NSTextAlignmentLeft; 這句無效       button.contentHorizontalAlignment = UIControlContentHorizontalAlig

ios 避免UIbutton快速點選造成多次響應的避免方法

1、可以使用: - (void) timeEnough {  UIButton *btn=(UIButton*)[self.view viewWithTag:33];  btn.selected=NO;  [timer invalidate];  timer=

深入理解JVMJVM執行時數據區域分類

return 位置 工作 () 對象 地方法 存在 utm 連續 JVM在運行java程序的過程中會把他所管理的內存劃分為若幹個不同的數據區域。這些區域都有各自的用途和創建、銷毀時間。有些區域隨著虛擬機的啟動而存在。有些區域則依賴用戶線程的啟動和結束而建

iOS仿寫探探App動畫

demo ron dem 布局實現 you image 轉場動畫 pan https 一、簡單介紹 探探動畫比較新穎,這也是它在眾多交友軟件中火熱的一個特色。實現這種動畫的方式可以有兩種方式實現: 1、使用轉場動畫實現 2、使用CollectionView自定義布局實現,

iOS繪圖

需要 tar lock cnblogs 效果 pre cgp 技術 etop 1、UIBezierPath(貝塞爾曲線)   1-1)、在重寫 drawRect: 方法裏使用     使用不難,看 UIBezierPath.h 基本都會用,值得註意的是,顏色設置如下: [

iOSCoreText的常用語法

ear 單位 [] 翻轉 1.2 iphone 書寫 attach direct CoreText的關鍵語法 一、坐標旋轉 -(void)drawRect:(CGRect)rect { //獲取上下文 CGContextRef ctx = UIGra

Oracle11g啟動Server服務報錯錯誤1053服務沒有及時響應或控制請求

今天 oracle11 alt .com 控制 啟動 oracl 電腦 變量 今日在啟動Oracle11g的服務時,突然莫名報錯,昨日尚一切正常,靜心細思:系統未升級;未安裝其他程序;未更改系統相關配置包括環境變量。 錯誤原因如下圖所示: 經過一番折騰,唯一發現今天特殊點

iOS詳細的正則表達式

bject for one 常用 一個 .cn 想要 bbb 公式 1、簡介: 在項目中,正則的使用是很普遍的,例如登錄賬號和密碼(手機號、郵箱等)。用到的方法就是謂詞對象過濾:NSPredicate。 2、什麽是正則表達式:   正則表達式,又稱正規表示法,是

iOSUITableView相關

lar 對齊 options bject 技巧 pear uitable col rec UITableView用得較多,遇到的情況也較多,單獨記錄一篇。 一、零散的技巧 二、取cell 三、導航欄、TableView常見問題相關 一、零散的技巧 1、 cell的選

Cocos Creator 按鈕響應事件

ava soft self. eat 自動 cos sof cli fault Cocos Creator版本:v1.7.0-rc.2 一、方法一 1.在LoginSceneCavans的腳本文件LoginScene.js中增加btnClick函數 btn

解決ios不支持按鈕:active偽類的方法

col color 需要 移動設備 style stat 開發 不支持 html mozilla開發社區上有 :active 不起作用的答案: [1] By default, Safari Mobile does not use the :active state

iOS百度長語音識別具體的封裝識別、播放、進度刷新

stat app span nsdata cst 放音 datawit har resp 一、介紹 以前做過訊飛語音識別,比較簡單,識別率很不錯,但是它的識別時間是有限制的,最多60秒。可是有的時候我們需要更長的識別時間,例如朗誦古詩等功能。當然訊飛語音也是可以通過曲線救

H5C3--background中cover,背景樣式,提升響應區域+精靈圖的使用

content post margin mage spl 其它 16px back border 一.cover的使用 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4