我刚刚注意到我的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)
欢呼加里
我试图为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上脉冲的文本颜色,直到用户按下按钮继续.
我遇到了麻烦,因为你不能动画[UILabel setColor:]你可以动画[UILabel setAlpha:]所以我要去试试.
- (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,所以我得到了一个很好的平滑循环?

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) 这是在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)
欢呼加里
我想创建一个空文件,所以我可以使用NSFileHandle打开它,这是正确的方法还是我错过了一些更好的方法?
success = [fileManager createFileAtPath:dataFile_OUT contents:nil attributes:nil];
outFile = [NSFileHandle fileHandleForWritingAtPath:dataFile_OUT];
Run Code Online (Sandbox Code Playgroud)
加里
是否有更好的方法来比较NSNumber与固定值,它只是感觉有点笨重.
if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero");
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用-compare但它几乎看起来一样......
加里
简单的问题...我有一个应用程序以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后立即停止.
我觉得NSTimer在应用程序调用后根本没有工作applicationWillResignActive.然而,我似乎现有的NSTimers(即在应用程序重新激活之前创建的活动)将继续运行,并且它唯一无法在此状态下安排的新NSTimers,任何人都可以确认这一点吗?
我也假设它的好(并且Apple似乎也这么说)当你的应用程序调用时applicationWillResignActive你应该禁用任何NSTimers并在applicationDidBecomeActive调用时再次启动它们,这有意义吗?
我使用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链接到控制器时,我无法将它连接起来.
我不确定这是正确的行为还是无意的.我已设置,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) 在实现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) objective-c ×9
iphone ×6
cocoa-touch ×5
c ×1
cocoa ×1
enums ×1
ios ×1
nstimer ×1
segue ×1
swift ×1
uitableview ×1