小编Bri*_*kel的帖子

防止部分NSAttributedString中的换行符

我正在开发一个UILabel具有大型主文本的文本,后跟较小的文本,告诉您是谁说的:

截图显示问题

现在它基本上是NSAttributedString小文本上的字体属性.

我想把事情做好,所以大文字包好,但小文字没有.也就是说,如果文本将与正确的项目中的所有内容相同,则它应该按原样呈现,但是它会像在左侧项目中一样包裹,整个小文本应该出现在下一行:

截图显示正确的行为

与我想要实现的HTML相当的是:

Title <nobr>Subtitle</nobr>
- or -
Title <span style="white-space:nowrap">Subtitle</span>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将这两个转换为NSAttributedStrings,NSHTMLTextDocumentType它似乎没有直接翻译.

nsattributedstring ios

14
推荐指数
2
解决办法
3491
查看次数

ARC的集群初始化程序

通过该解析上类集群文件,NSNumber实现了initWithChar:在大致按以下方式:

- (id)initWithChar:(char)c
{
    [self release];
    return [[__NSCharNumber alloc] initWithChar:c];
}
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用此模式从Nib初始化视图:

- (id)initWithFrame:(CGRect)frame
{
    id realSelf = [[self class] nib] instantiateWithOwner:nil options:nil][0];
    realSelf.frame = frame;
    [self release];
    return realSelf;
}
Run Code Online (Sandbox Code Playgroud)

我想知道,self在这些案件中,ARC是否管理了未退回的释放?是否记录在任何地方?

objective-c class-cluster

9
推荐指数
1
解决办法
267
查看次数

使用Closure Compiler简单优化从函数内部删除调试代码

我正在寻找一种从函数中删除调试代码的方法,这样我就可以为闭包添加测试挂钩.我已经阅读了 Google Closure Compiler高级版:在编译时删除了代码块,并测试了删除调试代码的方法如下:

/** @define {boolean} */
var DEBUG = true;

if (DEBUG) {
    console.log('remove me');
}
Run Code Online (Sandbox Code Playgroud)

简单的优化--define='DEBUG=false'减少了这个var DEBUG=!1;.这同样适用于此:

/** @const */
var DEBUG = false;

if (DEBUG) {
    console.log('remove me');
}
Run Code Online (Sandbox Code Playgroud)

我遇到麻烦的地方是在函数中使用这个约定:

/** @const */
var DEBUG = false;

function logMe() {
    if (DEBUG) {
        console.log('remove me');
    }
}
Run Code Online (Sandbox Code Playgroud)

这减少到以下几点:

var DEBUG=!1;function logMe(){DEBUG&&console.log("remove me")};
Run Code Online (Sandbox Code Playgroud)

我希望它进一步减少到:

var DEBUG=!1;function logMe(){};
Run Code Online (Sandbox Code Playgroud)

有没有理由不按预期工作?我真的只是想找到一种清除方法来剥离调试代码,我还没准备好接受高级优化.

更新

Per @ John的回答,我实现了自己的编译器,并发现以下配置将从if (DEBUG) {}代码的内部和外部删除@define:

CompilerOptions options = new …
Run Code Online (Sandbox Code Playgroud)

javascript minify google-closure-compiler

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

取消绑定UIFontDescriptor

我在应用程序中使用动态类型,并且有我想要更改字体外观的场景,例如使其变为斜体或取消绑定.添加样式很容易:

UIFontDescriptor *descriptor = [[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline]
                                fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *font = [UIFont fontWithDescriptor:descriptor size:descriptor.pointSize];
Run Code Online (Sandbox Code Playgroud)

然而,没有明确的机制去除风格.我可以尝试调整属性,但它们看起来更令人生畏,完全没有文档的API:

Regular Headline: {
    NSCTFontUIUsageAttribute = UICTFontTextStyleHeadline;
    NSFontNameAttribute = ".AppleSystemUIHeadline";
    NSFontSizeAttribute = 17;
}

Italic Headline: {
    NSCTFontUIUsageAttribute = UICTFontTextStyleItalicHeadline;
    NSFontNameAttribute = ".AppleSystemUIItalicHeadline";
    NSFontSizeAttribute = 17;
}
Run Code Online (Sandbox Code Playgroud)

我还缺少另一条途径吗?我可以使用,[UIFont systemFontWithSize:descriptor.pointSize]但我不想丢失动态类型提供的任何绘图规则.

objective-c uifont ios ios7

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

super allocWithZone在单例类概念中有一些疑问

我是Objective-C的新手,我正在尝试根据Apple的文档创建一个单例类.

+ (MyGizmoClass*)sharedManager
{
    if (sharedGizmoManager == nil) {
        sharedGizmoManager = [[super allocWithZone:NULL] init];
    }
    return sharedGizmoManager;
}

+ (id)allocWithZone:(NSZone *)zone
{
    return [[self sharedManager] retain];
}
Run Code Online (Sandbox Code Playgroud)

在此代码中sharedManager是一个静态方法,它将检查此类的对象是否存在.如果是这样,它将返回先前创建的对象,否则它将创建一个新对象.

我有一些问题:

  1. 如果sharedManager是静态的,它如何访问super

  2. 当我打印[super class]为什么它给出当前的类名?

  3. 为什么[[super allocWithZone:NULL] init]返回当前的类对象?

  4. 如果super等于self这里,为什么它不调用当前类allocWithZone:(NSZone *)zone

objective-c

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

在不改变状态栏颜色的情况下呈现视图控制器,如UIAlertController

在执行某些网络操作时,我提供了一个模态视图控制器(类似于MBProgressHUD但作为视图控制器)以防止用户交互并指示进度.

视图控制器modalPresentationStyle = .Custom使用转换委托和自定义演示控制器进行动画处理.除了动画转换动画之外,它们没有自定义动作来驱动演示文稿.

我遇到的问题是,无论何时出现视图控制器,它都会将状态栏颜色变为黑色.我可以覆盖preferredStatusBarStyle以使其始终返回.LightContent但有时这个视图控制器呈现在视图控制器上.Default,我也不想在那里更改它.基本上,我想要有相同的行为UIAlertController.

屏幕截图显示呈现的视图控制器导致黑暗状态栏内

我已尝试配置演示控制器以将呈现的视图控制器移出状态栏空间:

private class SEUIProgressControllerPresentationController: UIPresentationController {

    override func shouldPresentInFullscreen() -> Bool {
        return false
    }

    private override func frameOfPresentedViewInContainerView() -> CGRect {
        return super.frameOfPresentedViewInContainerView().insetBy(dx: 40, dy: 100)
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

这些设置会将显示控制器的顶部移出状态栏,但状态栏仍会受到影响.是否有我失踪的属性会阻止我的视图控制器更新状态栏样式?

ios uistatusbar presentviewcontroller swift uipresentationcontroller

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

创建基于autolayout的指标视图

我有一个可重复使用的视图,我将使用UITableViewCell'sUICollectionViewCell,并需要获取其尺寸tableView:heightForRowAtIndexPath:.一些子视图里面有东西,layoutSubviews所以我不能打电话systemLayoutForContentSize:,而我的计划是:

  1. 实例化指标视图.
  2. 设置大小以包括所需的宽度.
  3. 用数据填充它.
  4. 更新约束/布局子视图.
  5. 抓取视图的高度或内部"大小调整"视图.

我遇到的问题是,我不能强制视图布局而不将其插入视图并等待runloop.

我提炼了一个相当无聊的例子.这是View.xib.子视图未对齐以突出显示视图永远不会布局到基线位置:

View.xib

在主线程上我打电话:

UIView *view = [[UINib nibWithNibName:@"View" bundle:nil] instantiateWithOwner:nil options:nil][0];

NSLog(@"Subviews: %@", view.subviews);
view.frame = CGRectMake(0, 0, 200, 200);

[view updateConstraints];
[view layoutSubviews];
NSLog(@"Subviews: %@", view.subviews);

[self.view addSubview:view];
[view updateConstraints];
[view layoutSubviews];
NSLog(@"Subviews: %@", view.subviews);

dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"Subviews: %@", view.subviews);
});
Run Code Online (Sandbox Code Playgroud)

我得到以下视图信息:

1) "<UIView: 0x8bad9e0; frame = (50 50; 220 468); autoresize = W+H; layer = <CALayer: 0x8be0070>>"
2) "<UIView: 0x8bad9e0; frame = …
Run Code Online (Sandbox Code Playgroud)

iphone uikit ios autolayout

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

在maven-antrun-plugin中调用foreach

我正在尝试设置maven来在我的web项目中的目录上执行LESS CSS预处理器.基本流程是:

  1. Maven调用maven-antrun-plugin.
  2. Ant-contrib <foreach/>循环遍历目录并查找所有.less文件并调用目标.
  3. 目标执行Rhino,执行LESS转换文件.

为此,我有以下XML:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <configuration>
                        <target name="processLessFile">
                            <!-- ... -->
                        </target>
                        <target name="main">
                            <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath"/>
                            <property name="css.dir" location="src/main/webapp/css"/>
                            <foreach param="file" target="processLessFile">
                                <fileset dir="${css.dir}">
                                    <filename name="**/*.less" />
                                </fileset>
                            </foreach>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>ant</groupId>
                    <artifactId>ant-contrib</artifactId>
                    <version>1.0b2</version>
                </dependency>
            </dependencies>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是"主"目标开始执行但后来失败<foreach>:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project model-web-project: An Ant BuildException has occured: The following error occurred while executing this …
Run Code Online (Sandbox Code Playgroud)

ant ant-contrib maven maven-antrun-plugin

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

视图不会从iOS7中状态栏的底部开始

更新iOS7的应用程序时,UI显示在状态栏区域内.请参阅下面的图像中的"关于我们"和搜索按钮.

在此输入图像描述

在iOS6中,它从状态栏下方的正确位置开始.请注意,我是以编程方式创建此UI,而不是从故事板创建.

我找到了以下解决方案并将其放在我的视图控制器中,但它无法正常工作:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
    self.edgesForExtendedLayout = UIRectEdgeNone;
}
Run Code Online (Sandbox Code Playgroud)

rootViewController的标签栏我也试过以下没有运气:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
    self.tabBarController.edgesForExtendedLayout = UIRectEdgeNone;
}
Run Code Online (Sandbox Code Playgroud)

在我的其他故事板应用程序中,我能够在底栏和顶栏下取消选择.如果没有故事板,我该怎么做才能达到同样的效果?

iphone objective-c ios ios7

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

按下时将视觉效果添加到SKSpriteNode

我正在使用Xcode 6中的第一个SpriteKit应用程序,在Swift中编码.现在我从透明的png文件中制作了一些漂亮的按钮.但我想按下按钮时显示视觉效果.

我现在如何显示静态按钮的示例:

let playButton = Button(imageNamed:"playButton")
playButton.position = CGPointMake(self.size.width/2, self.size.height/2 - playButton.size.height * 2.5 - displacement)
self.sharedInstance.addChildFadeIn(playButton, target: self)
Run Code Online (Sandbox Code Playgroud)

任何效果都足够了,可能是脉冲效应,或按下时发光.我搜索过,但我在Swift中找不到任何东西.

编辑:更多信息

    class Button: SKSpriteNode {  
        init(imageNamed: String) {
            let texture = SKTexture(imageNamed: imageNamed)
            // have to call the designated initializer for SKSpriteNode
            super.init(texture: texture, color: nil, size: texture.size())
        }
        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
            self.runAction(SKAction.scaleTo(1.3, duration: kButtonFadingSpeed))
        }    
        override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
            self.runAction(SKAction.scaleTo(1.3, duration: kButtonFadingSpeed))
        }
         override func touchesEnded(touches: NSSet, withEvent event: …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode swift

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