OC一句代碼實(shí)現(xiàn)直播間界面滑動效果

效果圖

2016-12-07 15_43_36.gif

外界可這樣調(diào)用

- (UIView *)coverView {
    if (_coverView == nil) {
        [XYCoverView coverViewWithSuperView:self.contentView block:^(XYCoverView * _Nonnull view) {
            _coverView = view;
            view.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.1];
        }];
        
    }
    return _coverView;
}


以下是對此控件的封裝GitHub

.h文件

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface XYCoverView : UIView

/**
 * @explain 創(chuàng)建一個(gè)XYCoverView實(shí)例的對象
 *
 * @param   superView  父控件
 * @param   block  回調(diào)實(shí)例的對象
 */
+ (void)coverViewWithSuperView:(UIView *)superView block:(void(^)(XYCoverView *view))block;
@end

NS_ASSUME_NONNULL_END

.m文件

#import "XYCoverView.h"

@interface XYCoverView ()

@end

@implementation XYCoverView

+ (void)coverViewWithSuperView:(UIView *)superView block:(void(^)(XYCoverView *view))block {
    
    if (superView) {
        
        XYCoverView *view = [[self alloc] init];
        [superView addSubview:view];
        view.frame = superView.bounds;
        view.backgroundColor = [UIColor orangeColor];
        
        // 給自己添加手勢
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:view action:@selector(panGestureOnSelf:)];
        [view addGestureRecognizer:panGesture];
        
        // 給父控件添加點(diǎn)按手勢
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:view action:@selector(tapGestureOnSuperView:)];
        [superView addGestureRecognizer:tapGesture];
        UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc] initWithTarget:view action:@selector(panGestureOnSuperView:)];
        [superView addGestureRecognizer:panGesture1];
        
        if (block) {
            block(view);
        }
        
    }
   
}



#pragma mark - Event
- (void)tapGestureOnSuperView:(UITapGestureRecognizer *)tap {
    [UIView animateWithDuration:0.2 animations:^{
        
        self.frame = self.superview.frame;
    }];
    
}

- (void)panGestureOnSelf:(UIPanGestureRecognizer *)pan
{
    
    // 取出偏移量
    CGPoint offset = [pan translationInView:self];
    // 計(jì)算當(dāng)前coverView的frame
    self.frame = [self frameWithOffsetX:offset.x];
    // 復(fù)位
    [pan setTranslation:CGPointZero inView:self];
    
    // 當(dāng)向右移動的隱藏rightView
    if (self.frame.origin.x > 0) {
        // 向右
    } else if (self.frame.origin.x < 0) {
        CGRect frame = self.frame;
        frame.origin.x = 0;
        self.frame = frame;
        // 向左
    }
    
    CGFloat target = 0;
    // 當(dāng)手指松開時(shí)征椒,做自動定位
    if (pan.state == UIGestureRecognizerStateEnded) {
        // 手指離開屏幕
        if (self.frame.origin.x> CGRectGetWidth(self.superview.bounds) * 0.3) {
            target = CGRectGetWidth(self.frame);
        } else if (CGRectGetMaxX(self.frame) < CGRectGetWidth(self.superview.bounds) * 0.3) {
            target = -CGRectGetWidth(self.superview.frame);;
        }
        
        CGFloat offsetX = target - self.frame.origin.x;
        [UIView animateWithDuration:0.2 animations:^{
            self.frame = [self frameWithOffsetX:offsetX];
        }];
    }
    
}


- (void)panGestureOnSuperView:(UIPanGestureRecognizer *)pan {
    
    // 取出手指在view上的偏移量
    CGPoint offset = [pan translationInView:pan.view];
    
    //    NSLog(@"%f", offset.x);
    
    // 由于coverView上面也有了pan手勢悄窃,根據(jù)事件傳遞妖胀,coverView在顯示時(shí)會直接響應(yīng)pan手勢,而不會傳遞給父控件self.view上真,除非coverView不可以接受事件,所有當(dāng)self.view可以響應(yīng)pan事件時(shí),coverView肯定不在顯示著
    
    if (offset.x < 0) {
        CGFloat target = 0;
        CGFloat offsetX = target - self.frame.origin.x;
        [UIView animateWithDuration:0.2 animations:^{
            self.frame = [self frameWithOffsetX:offsetX];
        }];
        
    }
}


- (CGRect)frameWithOffsetX:(CGFloat)offsetX {
    
    CGRect frame = self.frame;
    frame.origin.x += offsetX;
    
    frame.size.height = self.superview.bounds.size.height;
    return frame;
}


@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜘犁,一起剝皮案震驚了整個(gè)濱河市团赁,隨后出現(xiàn)的幾起案子育拨,更是在濱河造成了極大的恐慌,老刑警劉巖欢摄,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熬丧,死亡現(xiàn)場離奇詭異,居然都是意外死亡怀挠,警方通過查閱死者的電腦和手機(jī)析蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绿淋,“玉大人闷畸,你說我怎么就攤上這事」” “怎么了腾啥?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我倘待,道長疮跑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任凸舵,我火速辦了婚禮祖娘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啊奄。我一直安慰自己渐苏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布菇夸。 她就那樣靜靜地躺著琼富,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庄新。 梳的紋絲不亂的頭發(fā)上鞠眉,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音择诈,去河邊找鬼械蹋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛羞芍,可吹牛的內(nèi)容都是我干的哗戈。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荷科,長吁一口氣:“原來是場噩夢啊……” “哼唯咬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起步做,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤副渴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后全度,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煮剧,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年将鸵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勉盅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顶掉,死狀恐怖草娜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痒筒,我是刑警寧澤宰闰,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布茬贵,位于F島的核電站,受9級特大地震影響移袍,放射性物質(zhì)發(fā)生泄漏解藻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一葡盗、第九天 我趴在偏房一處隱蔽的房頂上張望螟左。 院中可真熱鬧,春花似錦觅够、人聲如沸胶背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钳吟。三九已至,卻和暖如春苹祟,著一層夾襖步出監(jiān)牢的瞬間砸抛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工树枫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人景东。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓砂轻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斤吐。 傳聞我的和親對象是個(gè)殘疾皇子搔涝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,113評論 1 32
  • 今天一整天的靜心下來,看到自己卡在極度的無力幾盡絕望里和措。 我看到自己的無力與恐懼庄呈,我不能表達(dá)憤怒,因?yàn)檫@些憤怒都指...
    紫煙_3cfc閱讀 167評論 0 2
  • 文丨墻外有事 端午節(jié)結(jié)束了文兑!上班第一天的你是不是假期綜合癥一定又要犯了!沒事腺劣,墻姐向你扔了一只喵星人绿贞,讓你一次吸個(gè)...
    墻外有事閱讀 786評論 0 7
  • 我夜跑時(shí)候 操場已經(jīng)關(guān)門了 我只能在圖書館前的空地上跑步 我看見了夜晚的學(xué)校 因?yàn)樾I岱蛛x 晚上的校園只有研究生和...
    哪吒不讀書閱讀 244評論 1 1
  • 專有名詞 參與機(jī)制 上百萬個(gè)人的參與行動就可以積累成一種參與文化 搔到癢處 反正是自己本來要做這件事,那不妨將其當(dāng)...
    TROPICALlll閱讀 248評論 0 0