簡體   English   中英

為什么我的Arcs不在64位iOS設備上繪圖?

[英]Why aren't my Arcs drawing on 64 bit iOS devices?

我有使用Core Foundation函數CGPathAddArc()創建圓弧(也稱為半圓)的代碼。 在某些情況下,當代碼在64位OS設備(iPad Air和Air 2,iPhone 5s,iPhone 6等)上運行時,不會繪制圓弧,但會在32位設備上繪制。

代碼看起來像這樣:

CGPathAddArc(path,
             nil,
             CGRectGetMidX(bounds),
             CGRectGetMidY(bounds),
             MIN(bounds.size.width/2, bounds.size.height/2),
             3*M_PI_2,
             -M_PI_2,
             _drawArcClockwise
             );

在該示例中,如果_drawArcClockwise為TRUE,則繪制弧線,但是如果_drawArcClockwiseFALSE ,則不繪制_drawArcClockwise

我還測試了等效的UIBezierPath函數,它給出了相同的結果。

您可以在名為ArcTest的存儲庫中的github上看到一個顯示此問題的示例項目(鏈接)

答案似乎是iOS的64位實現中存在錯誤。 (或者可能是32位實現中的錯誤。)無論哪種行為正確,32位和64位設備在響應具有相同參數的同一調用時的行為都會有所不同。

修復上面的代碼是在順時針== FALSE時交換startAngle和endAngle參數:

CGFloat startAngle, endAngle;
startAngle = _drawArcClockwise ? 3*M_PI_2 : -M_PI_2;
endAngle =   _drawArcClockwise ? -M_PI_2  : 3*M_PI_2;
CGPathAddArc(path,
             nil,
             CGRectGetMidX(bounds),
             CGRectGetMidY(bounds),
             MIN(bounds.size.width/2, bounds.size.height/2),
             startAngle,
             endAngle,
             _drawArcClockwise
             );

該代碼可在32位和64位平台上運行。 我還沒有檢查在兩個平台上繪制圓弧的方向。 (通常沒關系,但是如果您是在形狀層中使用圓弧創建動畫並操縱形狀層的strokeStart和/或strokeEnd屬性,那將很重要。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM