小编Tri*_*cky的帖子

Metal / UIKit与.presentsWithTransaction同步

苹果文档CAMetalLayer状态属性presentsWithTransaction是:

一个布尔值,该值确定图层是否使用Core Animation事务显示其内容

当我使用UIKit驱动一些金属动画(类似于Apple在本WWDC 2012会话中为OpenGL建议的方法)时,我假设这是启用它的正确时机。我有一个Metal“背景”视图,上面覆盖了一些UIKit组件(也可以进行动画处理),因此这听起来很像适用的用例:

默认情况下,[ .presentsWithTransaction]为false:CAMetalLayer尽可能快地将渲染过程的输出显示到显示器上,并且与任何Core Animation事务异步显示。但是,如果您的游戏或应用结合了Metal和Core Animation内容,则不能保证Metal内容与Core Animation内容位于同一帧中。例如,如果您的应用在您的顶部绘制UIKit内容(例如带有目标位置和时间的标签),CAMetalLayer并且两个域需要同步,则可能会出现问题。

当然,在未启用该设置的情况下,滚动会显得生涩。随着presentsWithTransaction启用我有一些有限的成功,但既不是两条路线我已经启用该设置尝试是完美的。

我已经试过第一种方法如下中的指令的文档presentsWithTransaction。因此,我内部MTKViewDelegate有以下方法:

func draw(in view: MTKView) {
    guard
        let commandBuffer = commandQueue.makeCommandBuffer(),
        let drawable = view.currentDrawable
    else { return }

    updateState(device: device, library: library) // update positions, etc.
    render(with: commandBuffer, in: view) // drawing code

    commandBuffer.commit()
    commandBuffer.waitUntilScheduled()
    drawable.present()
}
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作,但是完全可以避免这种情况。它具有在某些点失同步的趋势,从而导致典型的颤抖通过UIScrollView例如a驱动滚动动画。整个想法presentsWithTransaction是完全避免这种情况,所以也许我在这里做错了。

第二种方法addScheduledHandler在命令缓冲区上使用:

func draw(in view: …
Run Code Online (Sandbox Code Playgroud)

uiscrollview uikit ios metal metalkit

6
推荐指数
1
解决办法
544
查看次数

即使SVN出现svn状态,SVN也不会提交未版本控制的文件

我在设置源项控制的新项目时遇到了困难.我已经将一个项目导入到subversion中,表面上看起来一切正常.但是,每当我在项目中添加一个新文件时,即使它在运行svn状态时出现无版本,当我尝试登记时也不会检查,无论是使用svn ci -m'msg'还是当我尝试我的版本OS X svn客户端.

这是svn状态的一些示例输出:

?      Assets/Placeholder Images/shopping_list_1.png
Run Code Online (Sandbox Code Playgroud)

当我尝试登记时,它只会检查那些已经版本化的文件.其余的都是默默无闻的!

关于如何解决这个问题的任何想法?

svn macos

5
推荐指数
1
解决办法
7165
查看次数

使用Interface Builder,NSObjectController子类和绑定时,在模型和视图之间插入控制器逻辑

在使用IB,NSObjectController子类和绑定时,我一直在努力理解插入​​控制器逻辑的最佳方法.

我需要在模型和视图之间插入控制器逻辑,我很难找到一种优雅的方法.是的,您可以将操作发送给文件所有者并处理其中的控制器逻辑,但是当某些核心数据模型可以扩展到具有深层关系结构的50个实体或更多实体时,这将开始加载到令人难以置信的锅炉板代码量.

一个非常简单的例子是这样的; 想象你有一个具有四个字符串属性的实体myTextWinter,myTextSpring,myTextSummer,myTextAutumn.你有一个通过NSObjectController连接到IB的视图.现在,假设用户可以通过选择菜单中的春,夏,秋,冬来选择他们希望查看的"季节" - 当选择该季节时,我想显示适当的季节文本.

在这个简化的例子中,我可以获取NSDocument子类中的对象,创建一个名为mySeasonText的属性,我在视图中绑定它,然后检查我的NSUserDefaults以获取适当的季节并将请求路由到模型中的相应属性.

问题来自于我有50个实体,有些实体有两个,三个或更多的关系,每个实体都有自己的季节特定文本属性集,我希望在从Season菜单中选择时切换.或者如果我将一堆nsarray控制器链接在一起以访问更深层次的对象.

到目前为止,我一直在做以下事情; 在我的每个模型对象中添加一个名为'mySeasonText'的属性,然后从我的控制器设置中获取设置,并路由到适当的季节.每当选择菜单中的新项目时,我都会刷新这些对象.

虽然这有效并消除了绝对大量的样板代码,但我的控制器逻辑现在已经在我的模型中了.

肯定有更好的办法!有人可以指点我正确的方向吗?

cocoa core-data objective-c interface-builder cocoa-bindings

5
推荐指数
1
解决办法
363
查看次数

Apple Metal Shader Language (MSL) 始终是线性颜色?

我试图在金属片段(或计算)着色器的上下文中理解颜色。

我的理解是,在金属着色器的上下文中,任何颜色值始终是线性的。无论纹理附加到片段或计算函数,金属都会在进入着色器时应用任何线性传递函数(伽玛)的反函数,并在退出时再次应用它。

考虑到这一点,如果在着色器的上下文中,我返回一个近似线性中间灰度值约为 22.25% 的值,当使用金属套件通过简单纹理渲染到屏幕时,我希望得到.bgra8Unorm一个非线性 sRGB 读数约为 128,128,128。

fragment float4 fragment_shader(
    TextureMappingVertex in [[stage_in]]
) {
    float middleGrey = float(0.2225);
    return float4(middleGrey, middleGrey, middleGrey, 1);
}
Run Code Online (Sandbox Code Playgroud)

但事实上,如果着色器内没有与线性颜色空间之间的转换,我会得到 57,57,57 的输出:

线性中灰

我在这里缺少什么?

一方面,这当然看起来更直观,但它违背了我认为的金属着色器的规则,因为它们总是在线性空间中。

ios metal metalkit

5
推荐指数
0
解决办法
536
查看次数

如何在附加的C数组中正确释放内存?

我只是想弄清楚为什么以下代码泄漏内存,我有一种有趣的感觉,我没有正确释放阵列内存.这是一个更广泛的Objective-c应用程序中的C函数,我不是C的原生...我曾尝试在数组上使用free(),但感觉这不是整个故事......

有人可以看一看,看看我在这里缺少什么.谢谢!

CFIndex theNumberOfSettings = 3;
CTParagraphStyleSetting theSettings[3] =
{
    {kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment},
    {kCTParagraphStyleSpecifierLineSpacing, sizeof(lineSpacing), &lineSpacing},
    {kCTParagraphStyleSpecifierHeadIndent, sizeof(headIndent), &headIndent}
};

CTParagraphStyleRef theParagraphRef = CTParagraphStyleCreate(theSettings, theNumberOfSettings);

CFAttributedStringSetAttribute(attrString, CFRangeMake(0, CFAttributedStringGetLength(attrString)-1), kCTParagraphStyleAttributeName, theParagraphRef);

CFRelease(theParagraphRef);
free(theSettings);
Run Code Online (Sandbox Code Playgroud)

c iphone cocoa objective-c

4
推荐指数
1
解决办法
912
查看次数