小编fuz*_*oat的帖子

ViewController初始化?

我刚刚注意到我的ViewController在启动时没有调用init(见下文).

-(id)init {
    self = [super init];
    if(self) {
        NSLog(@"_init: %@", [self class]);
        otherStuff...
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

是否有这样的原因,或者它被viewDidLoad取代

-(void)viewDidLoad {
    otherStuff ..
    [super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)

欢呼加里

iphone cocoa-touch objective-c

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

动画脉冲UILabel动画?

我试图为UILabel上的文字设置颜色的动画来从:[黑色]到[白色]到[黑色]并重复.

- (void)timerFlash:(NSTimer *)timer {
[[self navTitle] setTextColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0]];
[UIView animateWithDuration:1
                      delay:0 
                    options:UIViewAnimationOptionAllowUserInteraction 
                 animations:^{[[self navTitle] setTextColor:[[UIColor whiteColor] colorWithAlphaComponent:1.0]];} 
                 completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

.

[self setFadeTimer:[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFlash:) userInfo:nil repeats:YES]];
Run Code Online (Sandbox Code Playgroud)

首先,我不确定我的方法,我的计划(如上所示)是设置动画块并使用重复的NSTimer调用它直到取消.

我的第二个问题(正如你在上面看到的)是我从黑色(alpha 0)到白色(alpha 1)的动画,但我不知道如何再次动画回黑色,所以动画无缝循环

基本上我想要的是在UILabel上脉冲的文本颜色,直到用户按下按钮继续.

EDIT_001:

我遇到了麻烦,因为你不能动画[UILabel setColor:]你可以动画[UILabel setAlpha:]所以我要去试试.

EDIT_002:

- (void)timerFlash:(NSTimer *)timer {
    [[self navTitle] setAlpha:0.5];
    [UIView animateWithDuration:2 
                          delay:0 
                        options:UIViewAnimationOptionAllowUserInteraction 
                     animations:^{[[self navTitle] setAlpha:0.9];} 
                     completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

这是有效的(顺便说一句:我确实希望它停止,这就是为什么我把它连接到NSTimer,所以我可以取消它)唯一的事情就是这从midGray到nearWhite的动画然后弹出.有谁知道我会如何动画从nearWhite到midGray,所以我得到了一个很好的平滑循环? 在此输入图像描述

EDIT_003 :(解决方案)

Dave DeLong(见下文)建议的代码在修改为使用CALayer不透明度样式属性时确实有效:

UILabel *navTitle;
@property(nonatomic, retain) UILabel *navTitle;
Run Code Online (Sandbox Code Playgroud)

.

// ADD ANIMATION
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[anim setFromValue:[NSNumber …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

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

在Objective-C中使用枚举?

这是在Objective-C中使用emum的正确(甚至是有效的方法)吗?即,未使用menuItem,只是定义了一个列表add = 1,load = 2,list = 3等.

enum menuItems {
    add = 1    ,
    save       ,
    load       ,
    list       ,
    removeAll  ,
    remove     ,
    quit       
};

int optionSelect;

scanf("%d", &optionSelect);

switch (optionSelect) {
    case add: 
        //...
        break;
}
Run Code Online (Sandbox Code Playgroud)

欢呼加里

c enums objective-c ios

13
推荐指数
2
解决办法
2万
查看次数

创建用于写入的空文件?

我想创建一个空文件,所以我可以使用NSFileHandle打开它,这是正确的方法还是我错过了一些更好的方法?

success = [fileManager createFileAtPath:dataFile_OUT contents:nil attributes:nil];

outFile = [NSFileHandle fileHandleForWritingAtPath:dataFile_OUT];
Run Code Online (Sandbox Code Playgroud)

加里

objective-c

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

比较NSNumber与固定值?

是否有更好的方法来比较NSNumber与固定值,它只是感觉有点笨重.

if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero");
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用-compare但它几乎看起来一样......

加里

cocoa objective-c

13
推荐指数
2
解决办法
2万
查看次数

在后台请求iPhone位置?

简单的问题...我有一个应用程序以30秒的间隔记录用户位置(使用NSTimer)它完美地工作,直到应用程序变为"非活动"并且NStimer停止.因此,我正在寻找保持我的位置间隔(30秒)的选项,同时仍然能够记录相当准确的位置数据(精度在100米以内).

  • Option_001,Brute Force:让CLLocationManager,startUpdatingLocation一直使用UIBackgroundModes ="location"运行.不推荐,耗尽电池.根据要求规律,准确度约.10-65m.可能只是唯一现实的选择.

  • Option_002,SLC:我可以使用重要的位置更改,但位置更新的频率非常差(更不用说准确性).如果应用程序在具有有限数量的蜂窝塔的农村或荒野区域中运行,则尤其如此.规律未知,准确度约.500米

  • Option_003,混合:我可以在后台使用重要位置变化(SLC)作为"重要"移动的指示,然后根据kCLLocationAccuracyBest请求GPS位置.这可行,但SLC事件不会以接近30秒的间隔到达任何地方(特别是在行走时).规律未知,准确度约.为10-50m.

  • Option_004,别的什么?任何想法将不胜感激.


注意: 我认为我有这个工作,因为当您按下iPhone上的[LOCK](通过USB连接)时,将调用applicationWillResignActive,但NSTimers不会停止.如果您尝试使用未连接的iPhone(即手机正常使用),NSTimers几乎会在调用applicationWillResignActive后立即停止.

iphone cocoa-touch objective-c

13
推荐指数
1
解决办法
5330
查看次数

NSTimers在后台运行?

我觉得NSTimer在应用程序调用后根本没有工作applicationWillResignActive.然而,我似乎现有的NSTimers(即在应用程序重新激活之前创建的活动)将继续运行,并且它唯一无法在此状态下安排的新NSTimers,任何人都可以确认这一点吗?

我也假设它的好(并且Apple似乎也这么说)当你的应用程序调用时applicationWillResignActive你应该禁用任何NSTimers并在applicationDidBecomeActive调用时再次启动它们,这有意义吗?

iphone cocoa-touch objective-c nstimer

13
推荐指数
1
解决办法
7762
查看次数

当选择UITableView行时,是否调用prepareForSegue?

我使用NSFetchedResultsController设置了一个UITableView,它显示了许多原型UITableViewCells.我已经从我的UITableViewCell连接到我的DetailViewController的push segue.

在我的TableViewController中,我实现了两个:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __PRETTY_FUNCTION__);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"%s", __PRETTY_FUNCTION__);
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序并单击tableView中的一行时,我的应用程序只调用:

[TableViewController tableView:didSelectRowAtIndexPath:]
[TableViewController tableView:didSelectRowAtIndexPath:]
[TableViewController tableView:didSelectRowAtIndexPath:]
Run Code Online (Sandbox Code Playgroud)

如果我删除segue并将其重新连接到DetailViewController的UIBarButtonItem,那么segue被正确调用,任何人都可以想到我错过了什么?

编辑:

添加:

- (IBAction)tester:(id)sender {
    [self performSegueWithIdentifier:@"SEGTEST" sender:nil];
}
Run Code Online (Sandbox Code Playgroud)

并将它连接到一个名为"tester"的UIButtonBarItem并且它可以正常工作,当我从UITableViewCell链接到控制器时,我无法将它连接起来.

iphone objective-c uitableview segue

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

从实例访问类属性?

我不确定这是正确的行为还是无意的.我已设置,StealthFighter以便它返回一个类型计算属性变量调用ammunition.

func globalTests() {
    println("globalTests")
    println("AMMUNITION: \(StealthFighter.ammunition)")
    var myStealthFighter = StealthFighter()
    println("MISSILES: \(myStealthFighter.missiles)")
    println("AMMUNITION: \(myStealthFighter.ammunition)") // ERROR
}

class StealthFighter {
    class var ammunition:Int {
    return 500;
    }
    var missiles: Int = 5
}
Run Code Online (Sandbox Code Playgroud)

直接访问该类时,StealthFighter此工作正常,并按预期返回500.但是,如果我创建和实例myStealthFighter然后尝试访问实例上的类属性我得到错误:'StealthFighter' does not have a member named 'ammunition'我找不到任何提及,我假设从这个类属性只能通过类访问?而不是从它创建的任何实例?我只是想确保我正确理解这一点......

编辑:

所以我可能已经措辞了类型变量名称错误,因为它可能maxAmmunition意味着StealthFighters只能进行500轮.我可以看到这一点,如果你想要maxAmmunition上课,那么你问全班.

正如@Kreiri和@ 0x7fffffff指出的那样,你似乎可以通过使用dynamicType向实例询问类弹药(或maxAmmunition)是什么.

println("CLASS - AMMUNITION: \(StealthFighter.ammunition)")
var myStealthFighter = StealthFighter()
println("INSTA - AMMUNITION: \(myStealthFighter.dynamicType.ammunition)")
Run Code Online (Sandbox Code Playgroud)

.

// OUTPUT
// CLASS - …
Run Code Online (Sandbox Code Playgroud)

swift

13
推荐指数
1
解决办法
6341
查看次数

dealloc,使用release或设置为nil属性?

在实现dealloc时,我在书籍和网络上查看各种代码时都注意到了一点混乱.我的问题是在使用@property时我应该使用以下哪个.到目前为止,我一直在使用VERSION_001.

@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSString *type;
@property(nonatomic, retain) NSString *payload;
@property(nonatomic, retain) NSString *orbit;
Run Code Online (Sandbox Code Playgroud)

版本001

- (void)dealloc {
    [name release];
    [type release];
    [payload release];
    [orbit release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

版本002

- (void)dealloc {
    [self setName:nil];
    [self setType:nil];
    [self setPayload:nil];
    [self setOrbit:nil];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

12
推荐指数
1
解决办法
2049
查看次数

标签 统计

objective-c ×9

iphone ×6

cocoa-touch ×5

c ×1

cocoa ×1

enums ×1

ios ×1

nstimer ×1

segue ×1

swift ×1

uitableview ×1