小编jbr*_*nan的帖子

在NSLayoutManager中控制自定义文本属性周围的间距

我有一个自定义NSLayoutManager子类,用于绘制药丸状标记。我为带有自定义属性(TokenAttribute)的子字符串绘制了这些标记。我没问题。

但是,我需要在范围周围添加一点“填充” TokenAttribute(这样标记的圆角矩形背景将不会与文本相交)。

在此处输入图片说明

在上图中,我正在用橙色绘制令牌的背景,但我想在周围加些填充,469以使背景不紧贴文本。

我不太确定该怎么做。我尝试重写-boundingRectForGlyphRange:inTextContainer:以返回具有更多水平填充的边界矩形,但字形的布局实际上并不受此影响。

如何在某些字形/字形范围内增加间距?


这是我用于在布局管理器子类中绘制背景的代码:

- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(CGPoint)origin {

    NSTextStorage *textStorage = self.textStorage;
    NSRange glyphRange = glyphsToShow;

    while (glyphRange.length > 0) {

        NSRange characterRange = [self characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL];
        NSRange attributeCharacterRange;
        NSRange attributeGlyphRange;

        id attribute = [textStorage attribute:LAYScrubbableParameterAttributeName 
                                      atIndex:characterRange.location 
                        longestEffectiveRange:&attributeCharacterRange 
                                      inRange:characterRange];

        attributeGlyphRange = [self glyphRangeForCharacterRange:attributeCharacterRange 
                                           actualCharacterRange:NULL];
        attributeGlyphRange = NSIntersectionRange(attributeGlyphRange, glyphRange);

        if (attribute != nil) {
            CGContextRef context = UIGraphicsGetCurrentContext();
            CGContextSaveGState(context);

            UIColor *backgroundColor = [UIColor orangeColor];
            NSTextContainer *textContainer = self.textContainers[0];
            CGRect …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch nslayoutmanager uitextview ios textkit

8
推荐指数
1
解决办法
795
查看次数

有没有理由使用NSViewAnimation而不是CoreAnimation技术?

我正在开发Snow Leopard应用程序,我正在做一些视图动画(交换它们),我看过一些使用NSViewAnimation的旧例子.我想知道这些是否完全被Core Animation淘汰了?

对我来说似乎相当简单

[[myView animator] setFrame:newSwapFrame];
Run Code Online (Sandbox Code Playgroud)

但我只是想知道我是否遗漏了某些东西,或者NSViewAnimation是否仍然相关(除了向后兼容性).

cocoa core-animation osx-snow-leopard nsviewanimation

7
推荐指数
1
解决办法
2181
查看次数

如何在Cocoa中使用Bindings + CoreData实现iTunes风格的Source-List?

让我们说,为了说明,我在Cocoa中编写了一个iTunes克隆应用程序,该应用程序由CoreData支持.为简化起见,假设有两个"部分","图书馆",包括音乐,电影,广播等.第二部分称为"播放列表",其中包含用户生成的播放列表(只是哑列表,而不是智能播放列表) .

因此SourceList本身通常会实现NSOutlineView,这通常是直截了当的.

源列表的"库"部分并不真正包含用户生成的任何内容,只包含应用程序的"功能"(实质上),其中"播放列表"部分仅包含用户创建的自定义列表.如何用Bindings和CoreData做到这一点?是否可以将播放列表部分绑定到用户的数据并具有显示库功能的自定义方式?

我一般都会使用Bindings和AppKit弄湿我的脚,所以请耐心等待.我很感激帮助.我应该补充一点,我的目标是10.6及以上.

cocoa core-data cocoa-bindings

7
推荐指数
1
解决办法
1089
查看次数

在3D(iPhone)中包装/扭曲CALayer/UIView(或OpenGL)

我有一个UIView(因而是一个CALayer),我试图在3D空间中扭曲或弯曲.也就是说,想象一下我的UIView是一个扁平的标签,我想要部分包裹啤酒瓶(不是360度左右,只是在一个"侧面").

我认为这可以通过对视图的图层应用变换来实现,但据我所知,此变换仅限于图层的旋转,缩放和平移.我在这里可能是错的,因为我的线性代数在这一点上是模糊的,至少可以这么说.

我怎样才能做到这一点?

iphone core-animation transform opengl-es calayer

7
推荐指数
1
解决办法
3779
查看次数

QGridLayout,3个窗格,没有正确扩展

我正在尝试使用a布局窗口(所有代码)QGridLayout.我可以添加小部件到布局,它们显示在我的窗口中,但我无法弄清楚如何正确调整它们的大小.这就是我想要的

[Leftmost][--------Center---------][Rightmost]
Run Code Online (Sandbox Code Playgroud)

这些是我窗口的3个"窗格"(所有三个列表).左侧和右侧应该具有静态宽度并且拥抱它们各自的侧面,并且当窗口增大(或收缩)时,中心应该扩展以填充宽度.

一些代码:

// Create the subviews, add them to a grid layout, and set the layout to the window.
QTableView *list = new QTableView(0);
list->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QTableView *flashList = new QTableView(0);
flashList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

QPushButton *infoButton = new QPushButton("Info!");
QPushButton *flashFeedsButton = new QPushButton("Flashfeeds");

QGridLayout *gridLayout = new QGridLayout;



// Set the minimum widths for all three columns of the grid
gridLayout->setColumnMinimumWidth(GridColumnFirst, 300);
gridLayout->setColumnMinimumWidth(GridColumnSecond, 300);
gridLayout->setColumnMinimumWidth(GridColumnThird, 300);

// Set the minimum heights for all rows of the …
Run Code Online (Sandbox Code Playgroud)

qt qgridlayout qlayout

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

C++ g ++在类头文件中找不到'string'类型

我是C++的新手,但我无法弄清楚为什么这不会为我编译.我在Mac上运行,使用Xcode进行编码,但是我正在用bash构建自己的makefile.

无论如何,我得到两个编译器错误,即使我已经包含了"字符串"类型也无法找到.任何帮助都会受到欢迎.码:

//#include <string> // I've tried it here, too. I'm foggy on include semantics, but I think it should be safe inside the current preprocessor "branch"
#ifndef APPCONTROLLER_H
#define APPCONTROLLER_H

#include <string>
class AppController {
// etc.
public:
    int processInputEvents(string input); //error: ‘string’ has not been declared
    string prompt(); //error: ‘string’ does not name a type
};
#endif
Run Code Online (Sandbox Code Playgroud)

我在main.cpp中包含了这个文件,而在main中的其他地方我使用了这个string类型,它运行得很好.虽然在主要方面我已经包括iostream而不是string(用于其他目的).是的,我也尝试在我的AppController类中包含iostream,但它没有解决任何问题(我也没想到它).

所以我不确定问题是什么.有任何想法吗?

c++ string compiler-errors g++

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

Qt Creator:在再次运行之前退出应用程序的先前实例?

每次我在Qt Creator中运行我的项目时,它都会旋转我的应用程序的另一个实例.我必须手动退出应用程序,否则我的Dock会快速完成.太痛苦了.有没有解决的办法?如果我再次运行应用程序时,我可以终止已经运行的版本,这将更有意义.可以这样做吗?

macos qt qt-creator

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

ObjectInputStream - 如何等待新数据?

我有一个我正在制作的客户端 - 服务器应用程序,在阅读服务器上的对象时遇到了一些麻烦.

在我的服务器连接到客户端套接字后,我构建对象输入和输出流并将它们传递给我的service()方法.在那里,我应该处理来自客户端的不同类型的消息.我可以从客户端(即Message我的设计的一个对象)得到一条消息就好了.但是,当然,我想要做的就是有一个循环,这样我就可以得到一条消息,处理它并回复.

到目前为止,我的代码仅适用于单个消息.当我添加循环时,每次迭代都发生了什么,我的服务器只是一遍又一遍地读取相同的消息,然后我的客户端有机会通过套接字发送新消息(我认为这是正在发生的事情,至少) .

所以我真正需要做的是弄清楚如何使我的service()方法等待新的输入.有任何想法吗?或者我接近这个错误?我是否需要在每次迭代时创建一个新的OIS或......?一些代码:

public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {

    _shouldService = true;

    while (_shouldService) {
                    // It just keeps reading the same message over and over
                    // I need it to wait here until the client sends a new message
                    // Unless I'm just approaching this all wrong!
        NetworkMessage message = (NetworkMessage) input.readObject();

        NetworkMessageHeader header = message.getHeader();

        String headerType = header.getType();

        if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
            doLoginForMessage(message, output); …
Run Code Online (Sandbox Code Playgroud)

java sockets multithreading android objectinputstream

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

如何将此OpenGL指针数学转换为Swift?

我正在学习本教程关于iOS的OpenGL/GLKit的,但试图在Swift中实现它.在我到达这个部分之前一切正常:

- (void)render { 

// 1
self.effect.texture2d0.name = self.textureInfo.name;
self.effect.texture2d0.enabled = YES;

// 2    
[self.effect prepareToDraw];

// 3
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);

//---------------- This is where things break down...
long offset = (long)&_quad;        
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, geometryVertex)));
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, textureVertex)));

// 5    
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

}

@end
Run Code Online (Sandbox Code Playgroud)

我有一个房产 self.quad像这样的Swift结构:

struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}

struct TexturedQuad {

let bottomLeft: …
Run Code Online (Sandbox Code Playgroud)

opengl-es ios glkit swift

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

Qt:QListWidget项之间的分隔线?

我找不到任何方法在列表中的项目之间添加一行.我错过了什么吗?

qt qlistwidget

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