在今天发布的iOS 5.1 GM中测试我的应用程序时,我注意到我的一些视图是绘制纯黑色而不是图案背景颜色.完全相同的代码在以前的iOS版本上运行良好(在4.2 - 5.0.1上测试).
查看截图:

有没有人经历过这个?有解决方法吗?
我用<canvas>我的音乐教育网络应用程序绘制所有笔记和字形:http:
//www.musictheory.net/exercises/keysig/bc98yy
Firefox 15.0.1用户报告说,有时练习会继续讨论下一个问题,但画布仍会显示上一个问题.我已经看到这种情况发生在一次测试中(大约500个问题).
遇到这样的情况,在画布已经通过清除两者canvas.width = canvas.width并调用.clearRect上下文和字形在JavaScript中通过绘制.beginPath,.quadraticCurveTo,.closePath,等.然而,这似乎是在画布上的后盾缓冲区永远不会被刷新/被拉入窗口.
我在过去看到过有关类似问题的错误报告:
我可以通过执行DOM hack来强制重绘,例如将文本节点作为画布的子项插入,然后在下一个运行循环周期中删除它,或者修改画布的背景颜色或填充.然而,这似乎很苛刻,而且我一直有一种唠叨的感觉,我错过了一些明显的东西.
我的绘图代码很简单:
canvas.width = width;
ctx.clearRect(0, 0, width, height);
ctx.save();
// Lots of drawing code here
ctx.restore()
ctx.clearRect(0, 0, 1, 1); // Helped force a repaint on some older WebKit browsers?
Run Code Online (Sandbox Code Playgroud)
我已经确保了数量.save和.restore呼叫是平衡的.
1)我直接调用此代码以响应onclick事件处理程序.我应该在未来的运行循环周期中使用requestAnimationFrame或setTimeout执行绘图吗?
2)我没有错过一些明显的东西,比如canvas.pleaseRepaintNow()API,对吗?
3)是否有其他人遇到类似问题并使用DOM修改来强制重绘?
对于我的一个OS X程序,我有一些使用SSE4.1指令的优化案例.在仅限SSE3的计算机上,运行非优化分支:
// SupportsSSE4_1 returns true on CPUs that support SSE4.1, false otherwise
if (SupportsSSE4_1()) {
// Code that uses _mm_dp_ps, an SSE4 instruction
...
__m128 hDelta = _mm_sub_ps(here128, right128);
__m128 vDelta = _mm_sub_ps(here128, down128);
hDelta = _mm_sqrt_ss(_mm_dp_ps(hDelta, hDelta, 0x71));
vDelta = _mm_sqrt_ss(_mm_dp_ps(vDelta, vDelta, 0x71));
...
} else {
// Equivalent code that uses SSE3 instructions
...
}
Run Code Online (Sandbox Code Playgroud)
为了得到上面的编译,我不得不设置CLANG_X86_VECTOR_INSTRUCTIONS为sse4.1.
然而,这似乎告诉clang ROUNDSD可以在我的程序中的任何地方使用该指令.因此,程序崩溃在仅有SSE3的机器上SIGILL: ILL_ILLOPC.
将SSE4.1仅用于SupportsSSE4_1()if块的true分支内的代码行的最佳实践是什么?
如果没有子类化UIActivity,是否可以使用UIActivityViewController(UIActivityTypeMessage)通过Mail应用程序共享html消息?
当我将HTML作为NSString传递时,正文在消息正文中显示了html标签(例如),这不是我想要的。
ios ×2
canvas ×1
clang ×1
iphone ×1
javascript ×1
llvm ×1
objective-c ×1
redraw ×1
sse ×1
uiactivity ×1
uicolor ×1
uikit ×1
xcode ×1