第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CADisplayLink OpenGL渲染會破壞UIScrollView行為

CADisplayLink OpenGL渲染會破壞UIScrollView行為

瀟瀟雨雨 2019-08-31 16:19:16
SO上有一些類似的問題(最后的鏈接),但是沒有一個能讓我解決我的問題,所以這里有:我正在使用OpenGL渲染來制作圖像平鋪和緩存庫以供在游戲項(xiàng)目中使用,我想劫持UIScrollView的物理特性以允許用戶在圖像周圍導(dǎo)航(因?yàn)樗泻芎玫姆磸椥袨?,可能是好好利用它)。所以我有一個UIScrollView,我用它來獲取紋理的渲染視圖,但是有一個問題 - 在滾動視圖上移動會阻止CADisplayLink觸發(fā),直到用戶完成滾動(看起來很糟糕)。一個臨時修復(fù)是使用NSRunLoopCommonModes而不是默認(rèn)的運(yùn)行模式,但不幸的是,這打破了我正在測試的某些手機(jī)上的滾動視圖行為的某些方面(3GS和模擬器似乎工作正常,而iPhone4和3G沒有“T)。有誰知道如何解決CADisplayLink和UIScrollView之間的這種沖突,或者知道如何修復(fù)在其他運(yùn)行模式下工作的UIScrollView?提前致謝 :)承諾鏈接到類似的問題: UIScrollView損壞并停止使用OpenGL渲染滾動(相關(guān)的CADisplayLink,NSRunLoop)在iPhone上拖動UIScrollView時,OpenGL ES視圖中的動畫會凍結(jié)
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個贊

我的簡單解決方案是在運(yùn)行循環(huán)處于跟蹤模式時將渲染速率減半。我的所有UIScrollView現(xiàn)在都能順利運(yùn)行。


這是代碼片段:


- (void) drawView: (CADisplayLink*) displayLink

{

    if (displayLink != nil) 

    {

        self.tickCounter++;


        if(( [[ NSRunLoop currentRunLoop ] currentMode ] == UITrackingRunLoopMode ) && ( self.tickCounter & 1 ))

        {

            return;

        }


        /*** Rendering code goes here ***/

     }

}


查看完整回答
反對 回復(fù) 2019-08-31
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個贊

以下帖子的答案對我來說非常有效(它看起來與Till的答案非常相似):


UIScrollView暫停NSTimer直到滾動完成


總結(jié)一下:當(dāng)出現(xiàn)UIScrollView時禁用CADisplayLink或GLKViewController渲染循環(huán),并啟動NSTimer以所需的幀速率執(zhí)行更新/渲染循環(huán)。從視圖層次結(jié)構(gòu)中關(guān)閉/刪除UIScrollView時,重新啟用displayLink / GLKViewController循環(huán)。


在GLKViewController子類中,我使用以下代碼


出現(xiàn)在UIScrollView上:


// disable GLKViewController update/render loop, it will be interrupted

// by the UIScrollView of the MPMediaPicker

self.paused = YES;

updateAndRenderTimer = [NSTimer timerWithTimeInterval:1.0f/60.0f target:self selector:@selector(updateAndRender) userInfo:nil repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:updateAndRenderTimer forMode:NSRunLoopCommonModes];

解雇UIScrollView:


// enable the GLKViewController update/render loop and cancel our own.

// UIScrollView wont interrupt us anymore

self.paused = NO;

[updateAndRenderTimer invalidate];

updateAndRenderTimer = nil;

簡單有效。我不確定這是否會導(dǎo)致某種類型的工件/撕裂,因?yàn)殇秩九c屏幕刷新分離,但在我們的案例中使用帶有NSRunLoopCommonModes的CADisplayLink完全打破了UIScrollView。使用NSTimer對我們的應(yīng)用程序看起來很好,絕對比沒有渲染好很多。

查看完整回答
反對 回復(fù) 2019-08-31
  • 3 回答
  • 0 關(guān)注
  • 686 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號