WEEX遇到的問(wèn)題,源碼改動(dòng)備注 (二)

1. weex SDK中Slider燕刻,ScrollView等滾動(dòng)視圖上進(jìn)度條滑動(dòng)沖突
  • 創(chuàng)建scrollview子類
//fml fix

@interface FMLScrollView : UIScrollView
@end

@implementation FMLScrollView

- (instancetype)init
{
    self = [super init];
    if (self) {
       
    }
    return self;
}

- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
    if ([view isKindOfClass:NSClassFromString(@"FMLPlayerSliderView")] || [view isKindOfClass:NSClassFromString(@"HVMPBottomView")]) {
        return NO;
    }
    return YES;
}

- (BOOL)touchesShouldBegin:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event inContentView:(UIView *)view
{
    if ([view isKindOfClass:NSClassFromString(@"FMLPlayerSliderView")]) {
        return NO;
    }
    else {
        return YES;
    }
}

@end
  • 設(shè)置scrollview的兩個(gè)屬性:// self.canCancelContentTouches = YES; self.delaysContentTouches = NO;

  • 在slider視圖中添加pan手勢(shì)

- (void)panAction:(UIPanGestureRecognizer *)pan {
    if (self.duration <= 0.1 || isnan(self.duration)) {
        return;
    }
    
    BOOL _canLeft = YES;
    BOOL _canRight = YES;
    
    //點(diǎn)相對(duì)于上一個(gè)點(diǎn)的位置
    CGPoint moviePoint = [pan translationInView:pan.view];
    
    CGFloat curY = pan.view.center.x + moviePoint.x;
    
    //側(cè)滑的范圍
    CGFloat instance = self.frame.size.width;
    
    if (pan.view.frame.origin.x <= 0 && moviePoint.x <= 0) {
        //禁止左劃的情況(在最左邊時(shí))
        _canLeft = NO;
    }
    if (pan.view.frame.origin.x >= (instance - _leftWidth - _rightWidth) && moviePoint.x >= 0) {
        //禁止右劃得情況(在最右邊時(shí))
        _canRight = NO;
    }
    if (_canLeft & _canRight){
        //移動(dòng)
        if (curY <= _leftWidth) {
            pan.view.center = CGPointMake(_leftWidth, pan.view.center.y);
        }
        else if (curY >= (instance - _rightWidth)) {
            pan.view.center = CGPointMake(instance - _rightWidth, pan.view.center.y);
        }
        else {
            pan.view.center = CGPointMake(pan.view.center.x + moviePoint.x, pan.view.center.y);
        }
    }
    
    //每次都需要復(fù)位
    [pan setTranslation:CGPointZero inView:pan.view];
    
    //松開(kāi)手指時(shí)判斷滑動(dòng)趨勢(shì)讓其歸位
    if (pan.state == UIGestureRecognizerStateBegan) {
        if ([self.delegate respondsToSelector:@selector(sliderSeekBeginWithDuration:)]) {
            [self.delegate sliderSeekBeginWithDuration:self.duration];
        }
        
        _knobHighlightImageView.hidden = NO;
        [UIView animateWithDuration:0.4 animations:^{
            _knobHighlightImageView.transform = CGAffineTransformMakeScale(1.5, 1.5);
        }];
    }
    else if (pan.state == UIGestureRecognizerStateEnded) {
        CGFloat finalTime = 0;
        if (pan.view.frame.origin.x <= 0) {
            finalTime = 0;
            
        } else if(pan.view.frame.origin.x >= (instance - _leftWidth - _rightWidth)){
            finalTime = self.duration;
        }
        else {
            CGFloat sliderWidth = self.bounds.size.width - _leftWidth - _rightWidth;
            CGFloat curPercent = (pan.view.frame.origin.x - 0) / sliderWidth;
            finalTime = curPercent * self.duration;
        }
        if ([self.delegate respondsToSelector:@selector(sliderSeekEnd:duration:)]) {
            [self.delegate sliderSeekEnd:finalTime duration:self.duration];
        }
        [UIView animateWithDuration:0.4 animations:^{
            _knobHighlightImageView.hidden = YES;
            _knobHighlightImageView.transform = CGAffineTransformIdentity;
        }];
    }
}
2. 在#import "WXThreadSafeMutableArray.h"中數(shù)組越界
// fml fix
- (id)objectAtIndex:(NSUInteger)index
{
    __block id obj;
    if (![WXUtility threadSafeCollectionUsingLock]) {
        dispatch_sync(_queue, ^{
            if (index < _array.count) {
            obj = _array[index];
            }
        });
    } else {
        if (WX_SYS_VERSION_GREATER_THAN(@"10.0")) {
            os_unfair_lock_lock(&_osUnfairLock);
            if (index < _array.count) {
                obj = _array[index];
            }
            os_unfair_lock_unlock(&_osUnfairLock);
        } else {
            pthread_mutex_lock(&_safeThreadArrayMutex);
            if (index < _array.count) {
                obj = _array[index];
            }
            pthread_mutex_unlock(&_safeThreadArrayMutex);
        }
    }
    return obj;
}
// fml fix
- (void)removeObject:(id)anObject;
{
    if (![WXUtility threadSafeCollectionUsingLock]) {
        dispatch_barrier_async(_queue, ^{
            [_array removeObject:anObject];
        });
    } else {
        if (WX_SYS_VERSION_GREATER_THAN(@"10.0")) {
            os_unfair_lock_lock(&_osUnfairLock);
            [_array removeObject:anObject];
            os_unfair_lock_unlock(&_osUnfairLock);
        } else {
            pthread_mutex_lock(&_safeThreadArrayMutex);
            [_array removeObject:anObject];
            pthread_mutex_unlock(&_safeThreadArrayMutex);
        }
    }
}
// fml fix
#pragma mark
#pragma mark - Storage Index method
- (void)updateIndexForKey:(NSString *)key {
    if ([[self indexs] containsObject:key]) {
        [[self indexs] removeObject:key];
    }
    [[self indexs] addObject:key];
    [self write:[[self indexs] copy] toFilePath:[WXStorageModule indexFilePath]];
}

- (void)removeIndexForKey:(NSString *)key {
    if ([[self indexs] containsObject:key]) {
        [[self indexs] removeObject:key];
    }
    [self write:[[self indexs] copy] toFilePath:[WXStorageModule indexFilePath]];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末次绘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子类浪,更是在濱河造成了極大的恐慌,老刑警劉巖肌似,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件费就,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡川队,警方通過(guò)查閱死者的電腦和手機(jī)力细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)固额,“玉大人眠蚂,你說(shuō)我怎么就攤上這事《孵铮” “怎么了逝慧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我笛臣,道長(zhǎng)云稚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任沈堡,我火速辦了婚禮静陈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诞丽。我一直安慰自己鲸拥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布僧免。 她就那樣靜靜地躺著刑赶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猬膨。 梳的紋絲不亂的頭發(fā)上角撞,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音勃痴,去河邊找鬼谒所。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沛申,可吹牛的內(nèi)容都是我干的劣领。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼铁材,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尖淘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起著觉,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤村生,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后饼丘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體趁桃,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年肄鸽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卫病。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡典徘,死狀恐怖蟀苛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逮诲,我是刑警寧澤帜平,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布幽告,位于F島的核電站,受9級(jí)特大地震影響罕模,放射性物質(zhì)發(fā)生泄漏评腺。R本人自食惡果不足惜帘瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一淑掌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝶念,春花似錦抛腕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至廷蓉,卻和暖如春全封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桃犬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工刹悴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攒暇。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓土匀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親形用。 傳聞我的和親對(duì)象是個(gè)殘疾皇子就轧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,988評(píng)論 3 119
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多田度,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1妒御,想要解決就用__block...
    炙冰閱讀 2,492評(píng)論 1 14
  • 既然情色是小說(shuō)的一部分,那么默認(rèn)情色描寫應(yīng)該是文學(xué)性的镇饺,是為整個(gè)小說(shuō)服務(wù)的乎莉,而不是純粹的感官刺激——或者我們不妨說(shuō)...
    黑色玫瑰d閱讀 821評(píng)論 1 9
  • 本來(lái)打算昨晚弄完手繪作業(yè)但是… 到差不多十一點(diǎn)就上床了WN還在繼續(xù)作業(yè) 玩會(huì)手機(jī)繼續(xù)作業(yè)那時(shí)候的我在躺床上偷拍
    只不過(guò)是一場(chǎng)生活閱讀 207評(píng)論 1 1
  • Ⅰ. “只要你想成功,從現(xiàn)在開(kāi)始永遠(yuǎn)都不晚兰怠∶渭”多少人靠這碗雞湯度過(guò)了一年又一年,頻繁安慰自己今年的一事無(wú)成揭保,立志下...
    北方阿徐閱讀 692評(píng)論 1 0