刮刮卡效果非常簡(jiǎn)單痊硕,只需添加UIPanGestureRecognizer(拖動(dòng)手勢(shì))就可以完成了
首先介紹UITouch類(lèi)中包含如下成員函數(shù):
-(CGPoint)locationInView:(UIView *)view:函數(shù)返回一個(gè)CGPoint類(lèi)型的值懊亡,表示觸摸在view這個(gè)視圖上的位置,這里返回的位置是針對(duì)view的坐標(biāo)系的楣黍。調(diào)用時(shí)傳入的view參數(shù)為空的話(huà)钾怔,返回的時(shí)觸摸點(diǎn)在整個(gè)窗口的位置轨香。
-(CGPoint)previousLocationInView:(UIView *)view:該方法記錄了前一個(gè)坐標(biāo)值,函數(shù)返回也是一個(gè)CGPoint類(lèi)型的值仪或, 表示觸摸在view這個(gè)視圖上的位置确镊,這里返回的位置是針對(duì)view的坐標(biāo)系的。調(diào)用時(shí)傳入的view參數(shù)為空的話(huà)范删,返回的時(shí)觸摸點(diǎn)在整個(gè)窗口的位置蕾域。
當(dāng)手指接觸到屏幕,不管是單點(diǎn)觸摸還是多點(diǎn)觸摸到旦,事件都會(huì)開(kāi)始旨巷,直到用戶(hù)所有的手指都離開(kāi)屏幕。期間所有的UITouch對(duì)象都被包含在UIEvent事件對(duì)象中添忘,由程序分發(fā)給處理者采呐。事件記錄了這個(gè)周期中所有觸摸對(duì)象狀態(tài)的變化。
只要屏幕被觸摸搁骑,系統(tǒng)就會(huì)報(bào)若干個(gè)觸摸的信息封裝到UIEvent對(duì)象中發(fā)送給程序斧吐,由管理程序UIApplication對(duì)象將事件分發(fā)又固。一般來(lái)說(shuō),事件將被發(fā)給主窗口煤率,然后傳給第一響應(yīng)者對(duì)象(FirstResponder)處理仰冠。
關(guān)鍵代碼
// 1.計(jì)算位置(size就是手指刮一下的大小)
CGFloat offsetX = nowPoint.x - size.width * 0.5;
CGFloat offsetY = nowPoint.y - size.height * 0.5;
CGRect clipRect = CGRectMake(offsetX, offsetY, size.width, size.height);
// NSLog(@"%@",NSStringFromCGRect(clipRect));
// 2.開(kāi)啟上下文
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);
// 獲取當(dāng)前上下文
CGContextRef contextRef = UIGraphicsGetCurrentContext();
// 3.把圖片繪制的上下文
[view.layer renderInContext:contextRef];
// 4.設(shè)置成透明區(qū)域
CGContextClearRect(contextRef, clipRect);
// 5.獲取新圖片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 6.關(guān)閉上下文
UIGraphicsEndImageContext();
調(diào)用
//得到手指點(diǎn)到wipeiv中的點(diǎn)
CGPoint point = [pan locationInView:self.wipeIV];
//手指劃過(guò)的點(diǎn)設(shè)置成透明區(qū)域后返回的新圖片
self.wipeIV.image = [self.wipeIV.image ff_wipeImageWithView:self.wipeIV currentPoint:point size:CGSizeMake(40, 40)];