在項(xiàng)目里遇到的一點(diǎn)坑分享給需要的人
先放一張圖片再解釋功能需求
項(xiàng)目需要在點(diǎn)擊tableview里的第幾個(gè)cell的一個(gè)提示標(biāo)示捧书,然后以右下角為縮放點(diǎn)縮放的動(dòng)畫展示一個(gè)視圖提示
首先要或許這個(gè)點(diǎn)擊的位置相對(duì)于當(dāng)前視圖的frame
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:3];
CGRect rectIn = [self.tableView rectForRowAtIndexPath:indexPath];
CGRect rect = [self.tableView convertRect:rectIn toView:[self.tableView superview]];
這樣得到的frame就是第三個(gè)section的一個(gè)行的frame吹零,我們只需要里面的y就可以得到當(dāng)前cell對(duì)應(yīng)屏幕的y值了,當(dāng)然這里會(huì)有一個(gè)問題就是tableview會(huì)滾動(dòng)的問題肢簿,要解決這個(gè)問題只需要實(shí)現(xiàn)tableview滾動(dòng)視圖的代理就可以得到一個(gè)偏移量,這里我用一個(gè)屬性**offy(CGFloat)**來儲(chǔ)存
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
self.offy = self.scrollView.contentOffset.y;
}
這樣cell的 y = rect.orgin.y - self.offy
然后就是視圖右下角的繪畫(這個(gè)可以查查資料)球昨,接下來就是展示視圖
由于我要的是縮放效果烤蜕,所以要設(shè)置一個(gè)縮放點(diǎn)。按官方給的是這樣設(shè)置
view.layer.anchorPoint = CGPointMake(1,1); //1,1是最右下角韵吨,不知道的查查就知道了
可是以上訴方式設(shè)置后沒有效果匿垄,反而會(huì)使視圖彈出的位置偏移掉,在搜索無果后請教了人才得以解決
添加了一個(gè)uiview的分類里面添加一個(gè)方法重設(shè)anchorPoint
- (void)setRepairAnchorPoint:(CGPoint)anchorPoint {
CALayer *layer = [self layer];
CGPoint oldAnchorPoint = layer.anchorPoint;
[layer setAnchorPoint:anchorPoint];
[layer setPosition:CGPointMake(layer.position.x + layer.bounds.size.width * (layer.anchorPoint.x - oldAnchorPoint.x), layer.position.y + layer.bounds.size.height * (layer.anchorPoint.y - oldAnchorPoint.y))];
}
最后在彈出視圖前用這個(gè)方法設(shè)置縮放點(diǎn)(縮放點(diǎn)位置不會(huì)的可以回復(fù)或者百度)
如果分享有用謝謝給個(gè)贊归粉,隨時(shí)接受大神的指點(diǎn)~