[英]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,則繪制弧線,但是如果_drawArcClockwise
為FALSE
,則不繪制_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.