小编Bre*_*don的帖子

NSTextAttachmentCell高一英里

我在NSTextView [1]中编辑HTML的子集,我想模拟<hr>标签.

我已经想通了,顺便做它与NSTextAttachment和一个自定义NSTextAttachmentCell,并有所有的代码写入到插入附件和电池.问题是,单元格下面有大量的空白区域.

这个空间是不是电池的部件本身,如果我画了电池的整个面积的红色,这是完全正确的大小,但文中观点是把文本的下一行很远红下方.数量似乎取决于单元格上方的文本数量; 不幸的是,我正在使用<hr>标签至关重要的长文档,这会导致应用程序出现重大问题.

到底他妈发生了什么?

我的细胞亚类的钱部分:

- (NSRect)cellFrameForTextContainer:(NSTextContainer *)textContainer 
               proposedLineFragment:(NSRect)lineFrag glyphPosition:(NSPoint)position 
                     characterIndex:(NSUInteger)charIndex {
    lineFrag.size.width = textContainer.containerSize.width;

    lineFrag.size.height = topMargin + TsStyleBaseFontSize * 
        heightFontSizeMultiplier + bottomMargin;

    return lineFrag;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
       characterIndex:(NSUInteger)charIndex 
        layoutManager:(NSLayoutManager *)layoutManager {
    NSRect frame = cellFrame;
    frame.size.height -= bottomMargin;

    frame.size.height -= topMargin;
    frame.origin.y += topMargin;

    frame.size.width *= widthPercentage;
    frame.origin.x += (cellFrame.size.width - frame.size.width)/2;

    [color set];
    NSRectFill(frame);
}
Run Code Online (Sandbox Code Playgroud)

[1]我试图与isEditable集的web视图和它产生的标记是unusably脏尤其,我无法找到一种方法来包装<p>标签文本很好.


要回答Rob Keniger对插入水平规则附件的代码的请求:

- (void)insertHorizontalRule:(id)sender {
    NSAttributedString * rule = [TsPage newHorizontalRuleAttributedStringWithStylebook:self.book.stylebook];

    NSUInteger loc = self.textView.rangeForUserTextChange.location; …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nstextview nstextattachment

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

从NSOutlineView中削减几个级别的缩进

我有一个大纲视图,我想要缩进顶部的几个级别(他们有一个独特的外观反正),但我想缩进后面的水平.我怎样才能做到这一点?

我已经尝试重写-levelForRow:-levelForItem:从返回值中减去2,但这没有帮助.我也尝试重写-frameOfOutlineCellAtRow:从帧的宽度中减去2*indentationPerLevel,但这也没有帮助,可能是因为我没有显示透露三角形.有关如何解决此问题的任何想法?

大纲视图绑定到a NSTreeController,这使得难以展平底层数据结构,但我确实有一个大纲视图委托设置.

macos cocoa objective-c nsoutlineview appkit

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

在NSTableView中恢复选择(NSWindowRestoration)

我正在基于非文档的Cocoa应用程序中进行窗口恢复.该应用程序具有类似Mail.app的界面.每个窗口代表一个帐户; 该窗口中的侧边栏列出该帐户中的会话,主区域列出所选会话中的消息.

这些列表中的每一个都是基于视图的NSTableView.对话列表绑定到NSArrayControllercontentSet绑定到窗口控制器的account性能; 消息列表绑定到第二个NSArrayController,它contentSet绑定到第一个NSArrayController选择.

我已经将窗口恢复工作重新打开所有窗口并将它们与帐户对象重新关联,但我不知道如何恢复表视图的选择.这似乎不会自动发生 - 当窗口恢复时,选择了一个对象,但它不是之前选择的对象.这里发生了什么?保存和恢复选择的最简单方法是什么?

cocoa nstableview nswindowrestoration

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

从框架伞标题中排除内部标题

在尝试在框架中开始使用Swift(包括启用模块支持)时,我开始收到这样的消息:

[snip]/<module-includes>:1:1: Umbrella header for module 'PressKit' does not include header 'NPKBaseAppearance.h'
Run Code Online (Sandbox Code Playgroud)

有问题的标题(大约有十个)没有在PressKit.h中列出,但有充分的理由 - 它们包括内部或很少使用的类和类别,我不想向我的框架的大多数用户公开.(其中一些我想在选定的地方公开;其他人不应该暴露.)

将标题标记为私有似乎没有帮助.这是我框架项目中的一个警告,但是每个目标使用框架时出错,所以我不能忽略这个问题.

显然我可以将这些标题添加到我的伞标题中,但我不想这样做.在使用模块时,我是否违反了一些框架设计规则?处理这种情况的推荐方法是什么?

macos objective-c clang swift

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

为什么人们使用`Module.send(:prepend,...)`?

我正在学习如何使用Module.prepend而不是alias_method_chain在我的Ruby代码中,我注意到有些人send用来调用它(例子):

ActionView::TemplateRenderer.send(:prepend,
    ActionViewTemplateRendererWithCurrentTemplate)
Run Code Online (Sandbox Code Playgroud)

其他人直接称之为(例子):

ActionView::TemplateRenderer.prepend(ActionViewTemplateRendererWithCurrentTemplate)
Run Code Online (Sandbox Code Playgroud)

而且,虽然我没有看到有人使用这种风格,但我怀疑从文档中你甚至可以在你以前的模块中写这个:

module ActionViewTemplateRendererWithCurrentTemplate
    # Methods you're overriding go here

    prepend_features ActionView::TemplateRenderer
end
Run Code Online (Sandbox Code Playgroud)

这三种风格有什么区别吗?是否有理由支持其他人?

ruby metaprogramming ruby-2.0 ruby-on-rails-5

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

NSProgressIndicator不在图层支持的视图中设置动画

NSProgressIndicator在层支持视图的子视图中有条形.它的行为有点复杂,但在某些点上,它显示为条形不确定的进度指示器.问题是,在这种状态下,它没有动画(即转动理发杆).关闭图层支持可以解决问题,但这使得其他动画窗口不太顺畅,所以我希望能有更好的东西.

这是完整的行为:当设置了脏标志的数量时,它应该作为不确定的动画进度指示器可见; 然后在短暂的延迟之后(为了确保用户已完成输入),它会转换为确定的进度指示器并在执行各种操作时填充; 最后,在整个过程结束时,它再次隐藏起来.

为实现这一点,我设置了以下绑定:

  • 隐藏绑定到我的模型的loading属性与NSNegateBoolean值变换器.
  • Indeterminate是否绑定到我的模型的waitingForInput属性.
  • 绑定到我的模型的currentProgress属性(当waitingForInput为真时为0 ).
  • Max Value绑定到我的模型的maximumProgress属性(当waitingForInput为true 时为0 ).

这主要工作,但有一个例外:当waitingForInputYES,因而进度指示器是不确定的,进度指示器没有动画.

进度指示器不更新的通常原因是程序员使用长时间运行的操作来阻止运行循环,但我不这样做:在有问题的时间段内,运行循环是完全打开的,只有一个计时器等待开火.据我所知,它也不是一些奇怪的模式.该应用程序在此期间接受击键和其他事件,没有任何问题.(后期阶段,确定的进度指示器填满,由异步驱动NSURLConnection,所以它也不会阻塞.)

我已经采取了几个步骤来尝试解决此问题:

  • 我已经尝试将进度指示器上的Animate绑定设置为我的模型waitingForInput属性,如Is Indeterminate.这会导致动画在更改通知触发时急剧更新waitingForInput(waitingForInput每次输入延迟重新启动时都会发送KVO通知),但我希望动画更平滑.
  • 我一直在使用志愿观察变化都试过loadingwaitingForInput.当观察到变化时,它会根据需要调用进度指示器-startAnimation:-stopAnimation:方法.这些没有明显的效果.
  • 我已经尝试将usesThreadedAnimation进度指示器设置为NO.(Google上的一篇文章表明,这可能有助于更新图层支持的进度指标上的问题.)这没有明显的效果.我也试过YES,只是为了踢,这被证明同样徒劳无功.

最后,我也尝试过关闭图层背衬.当与Animate绑定结合使用时,这确实解决了问题.但是,它会让其他动画的性能降低到令人无法接受的程度,所以我宁愿避免这样做.

那么,任何想法,任何人?我真的很感激这个问题的一些帮助!

macos cocoa core-animation appkit

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

Heroku上的每夜批处理网络任务

我们正在研究Heroku上的Rails项目,该项目需要每晚为每个用户搜索和处理数据.这需要每个用户进行许多Internet访问,我们希望能够支持数以万计的用户.虽然对所涉及的数据库进行了大量的解析,计算和写入,但我们预计大部分任务的时间将用于等待来自网络的数据.

在最小化挂钟时间和Heroku费用的同时,执行此任务的最佳通用方法是什么?显然,要么需要并发或异步网络来利用等待网络所花费的时间,但我们应该怎么做呢?我们正在考虑使用分叉工作进程的数据库支持队列,但这可能不是最好的方法 - 或者甚至可能在Heroku上不可能.

ruby networking background ruby-on-rails heroku

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

基金会收藏无法存储零的深层设计原因是什么?

大家都知道,基金会收藏喜欢的NSArray,NSDictionaryNSSet不能存储nil的对象,而且你必须使用NSNull替代.我敢肯定,如果我挖掘开源Core Foundation源代码,我甚至可以找到强制执行的地方.

我不明白的是,为什么他们这样设计?它纯粹是因为nil在某些构造函数中被用作哨兵,还是有更深层次的原因导致这种行为?

macos null objective-c foundation ios

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

矢量绘图工具的iPhone开发

这不是一个严格的编程问题,但我在这里问它,因为它肯定是一个软件开发问题,如果你采用"软件开发"来包括创建软件系统的所有方面.

我是一名独立的iPhone开发人员.除了翻译,我自己处理我的应用程序的所有方面 - 包括图形.我必须定期创建各种图标,按钮和UI元素.我已经学会了这些方面的一些技巧,虽然它们肯定不是艺术品,但我可以有效地使用渐变,阴影,边框笔触,透明度和纹理来创建简约,有吸引力的效果.

到目前为止,我已经使用了一个名为VectorDesigner的矢量绘图工具进行所有开发,偶尔使用Pixelmator进行光栅后处理.到目前为止,它的工作基本上没问题,但是VectorDesigner有很多问题:

  • 它对其文件使用包格式,这会干扰Subversion的使用.
  • 它是一个非常多的打印工具,我必须非常小心,不要在分数像素值上结束导致抗锯齿的对象.
  • 虽然你可以采用联合或形状的交集,或者对它们进行加减,但是曲线往往会随着重复的布尔运算而变形,有时非常显着.
  • 并且它几乎不能控制笔画,直到我几乎不使用它们.

因此,我正在寻找一种更好的工具来实现这一特定目的:在没有图形设计培训的情况下,在Mac上基于形状绘制简单图标,按钮和UI元素.良好的导出功能将是一个优势 - 理想情况下,将PNG导出到它在我的项目中的位置几乎同样容易,因为它是保存(而非另存为)文件.

对我来说,完美的工具是允许您通过堆叠由原始形状(可以保持单独编辑)定义的区域和蒙版来定义对象的形状,然后在这些对象上定义属性,如变换和笔划.不过,我不知道是否存在这样的事情.

Adobe的工具通常会让我觉得非常重量级,并且通常很昂贵,但我认为它们是可能的.(Fireworks,它强调屏幕设计,看起来可能特别合适,但我对此知之甚少.)但还有什么呢?如果你处在像我这样的位置,你会用什么?您有什么推荐的吗?


编辑补充说:当然,平面设计师可以从古老的MacPaint副本中获得比Illustrator CS5更好的结果.没有工具可以取代技能和品味,许多程序员也没有.我对此很清楚.但我很幸运,至少有一些品味足以让我的用户赞美我的应用在评论中的外观.我不是很有天赋,但我确实知道我的局限性,而且我不会让自己产生任何丑陋的东西.鉴于我的预算,现在必须这样做.

iphone macos graphics vector-graphics

3
推荐指数
1
解决办法
2148
查看次数

恢复 Stripe 订阅(并对之前未付费的服务收费)

我有一个网络服务,可以为我的用户发布和托管某些信息。每个用户的编辑界面与他们发布的信息是分开的。我使用 Stripe 订阅进行计费,但我无法找到处理未付费订阅的可行方法。这是我想要实现的逻辑:

\n\n
    \n
  1. 第一次计费尝试失败后,我的应用程序应锁定用户的编辑界面;相反,它应该向他们提供一个页面,其中包含解决付款问题的选项。但是,他们发布的信息仍将发布,因此延迟付款不会中断访问者的活动。
  2. \n
  3. 在最后一次计费尝试失败后,即 15 天后,我的应用程序也应该删除他们发布的信息。此时,用户的编辑界面将被替换为允许他们使用新信用卡重新激活帐户或完全删除帐户的界面。
  4. \n
  5. 如果用户选择重新激活帐户,他们不应获得试用期
  6. \n
  7. 如果用户重新激活,他们还应该为之前跳过的 15 天付费,方法是将首个计费周期缩短 15 天,或者将相当于 15 天服务的费用添加到首个计费周期中。账单。
  8. \n
\n\n

如果我观察正确的 webhooks\xe2\x80\x94,#1 和 #2 很容易实现,只需将拖欠客户或已删除或未付费订阅的客户的请求重定向到“修复此问题”页面。#3 也很简单\xe2\x80\x94只需创建订阅并将其trial_end设置为now

\n\n

第 4 点很棘手。如何确定用户的最后一张发票在其订阅被取消之前未支付的时间有多久?如何缩短新订阅的第一个计费周期?或者,我如何按比例计算客户的上一张发票总额以代表我实际提供给他们的部分,以便我可以将该金额添加到新发票中?(我知道我可以在开始新订阅之前创建一个发票项目来收取金额,所以至少这是可能的。)

\n\n

最后,Stripe 的“标记订阅未付费”选项对解决这些问题有帮助吗?看起来它一直在创建发票,但并不尝试对其收费;我不认为这就是我想要的。

\n

credit-card subscription recurring-billing stripe-payments

2
推荐指数
1
解决办法
3557
查看次数

在Swift中将String转换为[Character]的最佳方法是什么?

我想在字符串上运行一个过滤器.我的第一次尝试失败,因为字符串没有自动转换为Character [].

var s: String = "abc"
s.filter { $0 != "b" }
Run Code Online (Sandbox Code Playgroud)

如果我用下面的代码笨拙地将String转换为Character [],它将按预期工作.但肯定有一个更简洁的方式?

var cs:Character[] = []
for c in s {
    cs =  cs + [c]
}

cs = cs.filter { $0 != "b" }

println(cs)
Run Code Online (Sandbox Code Playgroud)

swift

0
推荐指数
1
解决办法
1132
查看次数