@interface YQBAddHomeWorkBtn()<UIGestureRecognizerDelegate>
@end
@implementation YQBAddHomeWorkBtn
{
CGPoint originalLocation; //全局變量 用于存儲起始位置
BOOL shouldPassEvent; // 是否需要傳遞事件
}
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.userInteractionEnabled = YES;
// 取消高亮
[self setAdjustsImageWhenHighlighted:NO];
[self setNeedsUpdateConstraints];
}
return self;
}
- (instancetype)init
{
if (self = [super init]) {
self.userInteractionEnabled = YES;
// 取消高亮
[self setAdjustsImageWhenHighlighted:NO];
[self setNeedsUpdateConstraints];
}
return self;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
originalLocation = [touch locationInView:self];
shouldPassEvent = YES;
[[self superview] bringSubviewToFront:self];
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
//計算位移=當前位置-起始位置
CGPoint point = [[touches anyObject] locationInView:self];
float dx = point.x - originalLocation.x;
float dy = point.y - originalLocation.y;
//計算移動后的view中心點
CGPoint newcenter = CGPointMake(self.center.x + dx, self.center.y + dy);
/* 限制用戶不可將視圖拖出屏幕 */
float halfx = CGRectGetMidX(self.bounds);
//x坐標左邊界
newcenter.x = MAX(halfx + offset, newcenter.x);
//x坐標右邊界
newcenter.x = MIN(self.superview.bounds.size.width - halfx - offset, newcenter.x);
//y坐標同理
float halfy = CGRectGetMidY(self.bounds);
// y坐標上邊界
newcenter.y = MAX(halfy + 80, newcenter.y);
newcenter.y = MIN(self.superview.bounds.size.height - halfy - offset, newcenter.y);
// 判斷是否需要傳遞事件
shouldPassEvent = CGPointEqualToPoint(newcenter, originalLocation);
//移動view
self.center = newcenter;
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
if (shouldPassEvent) {//點擊事件 需要傳遞點擊
[super touchesEnded:touches withEvent:event];
}
}
- (void)updateConstraints
{
[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[super updateConstraints];
}
IOS 拖動事件和點擊事件沖突
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 1、當界面同時存在有定時器和UIScrollView時,比如:一個界面頂部是一個由定時器控制的無限輪播圖,下面是一...
- 0、緣起 之所以要寫這篇文章,是因為發(fā)現(xiàn)在實際編程處理點擊事件的過程中,知道響應(yīng)鏈和探測鏈根本沒有一點用處。 即使...
- 實現(xiàn)手勢的代理方法中進行判斷,這樣就可以選擇響應(yīng)哪個事件 -(BOOL)gestureRecognizer:(UI...
- 最近開發(fā)遇到listView中解析爬蟲回來的html數(shù)據(jù)超鏈接點擊問題。有文字html標簽鏈接和純網(wǎng)址鏈接混合...