小编Dar*_*ust的帖子

如何在animationDidStop委托中识别CAAnimation?

我遇到了一个问题,我有一系列重叠的CATransition/CAAnimation序列,所有这些都是我需要在动画停止时执行自定义操作,但我只需要一个dynamicDidStop的委托处理程序.

但是,我遇到了一个问题,似乎没有办法在animationDidStop委托中唯一标识每个CATransition/CAAnimation.

我通过作为CAAnimation的一部分公开的键/值系统解决了这个问题.

当您启动动画时,请使用CATransition/CAAnimation上的setValue方法设置在animationDidStop触发时使用的标识符和值:

-(void)volumeControlFadeToOrange
{   
    CATransition* volumeControlAnimation = [CATransition animation];
    [volumeControlAnimation setType:kCATransitionFade];
    [volumeControlAnimation setSubtype:kCATransitionFromTop];
    [volumeControlAnimation setDelegate:self];
    [volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal];
    volumeControlLevel.enabled = true;
    [volumeControlAnimation setDuration:0.7];
    [volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"];
    [[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];    
}

- (void)throbUp
{
    doThrobUp = true;

    CATransition *animation = [CATransition animation]; 
    [animation setType:kCATransitionFade];
    [animation setSubtype:kCATransitionFromTop];
    [animation setDelegate:self];
    [hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
    [animation setDuration:2.0];
    [animation setValue:@"Throb" forKey:@"MyAnimationType"];
    [[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
Run Code Online (Sandbox Code Playgroud)

在animationDidStop委托中:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{

    NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
    if ([value isEqualToString:@"Throb"])
    {
       //... …
Run Code Online (Sandbox Code Playgroud)

iphone core-animation

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

如何将遗留构建系统与Xcode 10的`xcodebuild`一起使用?

我想使用Xcode 10的新构建系统进行开发,但是我们在持续集成系统中的构建失败了,因为xcarchive产生了一个问题:它Info.plistxcarchive缺少ApplicationProperties密钥和信息!

事实证明,切换回遗留构建系统可以解决这个问题.这可以在工作区设置(文件>工作区设置...>构建系统)中完成.但我更愿意保留新的构建系统以进行开发,并且只使用遗留构建系统进行CI构建.

有没有办法在xcodebuild不修改工作空间的情况下使用遗留构建系统?

xcode continuous-integration xcodebuild xcode10

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

设置动画时,uiscrollview setcontentoffset动画不滚动的问题:是的

这很奇怪,我想知道是否有人有任何想法?

我正在尝试滚动UIScrollView以响应iPad上的按钮按下.

如果我做:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: NO];
Run Code Online (Sandbox Code Playgroud)

滚动视图按预期跳转到所需位置,但我希望它滚动.但是,当我这样做时:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: YES];
Run Code Online (Sandbox Code Playgroud)

然后它什么都没做!我有另一个滚动视图,它正常工作并按setContentOffset:YES预期响应,所以我很困惑.关于为什么滚动可能不会发生的任何想法都是最受欢迎的!

此外,使用时- (void)scrollViewDidScroll:(UIScrollView *)sender 根本没有收到任何东西,animated:YES但在animated:NO使用时会被调用!

iphone uiscrollview animated

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

在Swift中将Int转换为Double

label.text = String(format:"%.1f hour", theOrder.bookingMins/60.0)
Run Code Online (Sandbox Code Playgroud)

上面的代码只是得到错误:'Int' is not convertible to 'Double'

bookingMins是Int类型,那么如何在Swift中将Int转换为Double?似乎不像C中那么简单

ios swift

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

为应用程序设置默认的iOS本地通知样式

从iOS 5开始,有两种通知样式:横幅和警报("旧"样式).用户可以在设置中设置要为每个应用程序使用的样式.但是,现在默认似乎是通知显示横幅样式.

我正在使用本地通知来提醒"现在"发生的事件.一个横幅在它出现后不久就消失了(并且它不够明显,人们可以点击它),所以对于这些通知,需要将警报样式通知保留在屏幕上直到用户决定一个动作(忽略或去到应用程序).

有没有办法通过代码或例如Info.plist条目告诉iOS默认情况下应该使用警报样式通知(只要用户没有配置其他东西)?

更新:缺乏信息/文件是不足以让我解决这个问题.我想要一个像权威人士的论坛/博客文章(Apple员工或Erica Sadun的人)说这是不可能的,或者如果有可能那么我想要解决方案.像"要求用户更改设置"这样的解决方法也不够好.

ios localnotification uilocalnotification ios5

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

如何在CALayer上获得触摸事件?

我是iPhone SDK的新手.现在我正在使用CALayers进行编程,我非常喜欢它 - 不像UIViews那么昂贵,而且代码比OpenGL ES sprites少得多.

我有这个问题:是否有可能在CALayer上获得触摸事件?我知道如何在UIView上获得触摸事件

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
Run Code Online (Sandbox Code Playgroud)

但我无法找到关于如何在CALayer对象上获取触摸事件的任何地方,例如,漂浮在3D空间中的橙色方块.我拒绝相信我是唯一一个对此感到好奇的人.

我感谢任何帮助!

iphone events touch calayer

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

铸造闭合/块

在Objective-C中,我经常传递块.我经常使用它们来实现模式,以帮助避免将内容存储到实例变量中,从而避免线程/时序问题.

例如,我将它们分配给一个CAAnimationvia,-[CAAnimation setValue:forKey:]这样我就可以在动画结束时执行该块.(Objective-C中可以把块作为对象,你也可以做[someBlock copy][someBlock release].)

但是,尝试在Swift和Objective-C中使用这些模式似乎非常困难.(编辑:我们可以看到语言仍在变化:已经调整了代码,因此它适用于Xcode6-beta2,之前的版本适用于Xcode6-beta1.)

例如,我无法转换AnyObject回块/闭包.以下产生编译器的错误:

override func animationDidStop(anim: CAAnimation!, finished flag: Bool)
{
    let completion : AnyObject! = anim.valueForKey("completionClosure")
    (completion as (@objc_block ()->Void))()
    // Cannot convert the expression's type 'Void' to type '@objc_block () -> Void'
}
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方法,但它非常难看,恕我直言:在我的桥接标题中,我有:

static inline id blockToObject(void(^block)())
{
    return block;
}

static inline void callBlockAsObject(id block)
{
    ((void(^)())block)();
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在Swift中做到这一点:

func someFunc(completion: (@objc_block ()->Void))
{
    let animation = CAKeyframeAnimation(keyPath: "position")
    animation.delegate …
Run Code Online (Sandbox Code Playgroud)

closures block objective-c swift

15
推荐指数
2
解决办法
4470
查看次数

11
推荐指数
2
解决办法
8198
查看次数

Objective-C的代码格式化程序

之前已经提出过类似的问题,但它们并没有帮助我做我想做的事情:

我想重新格式化现有的Objective-C代码(几百个文件).对于纯苹果风格的格式化,uncrustify似乎做我想要的.但是对于一些项目,我需要一种不同的风格,我还没有找到如何配置unrustify.在这种风格中,长方法调用看起来像这样(请不要讨论你是否喜欢这种风格;不建议使用不同的风格):

[self
    longMethod:arg1
    withLots:arg2
    ofArguments:arg3
    aBlock:^{
       [self doSomething];
    }
    andAnotherBlock:^{
       [self doSomethingElse];
    }
];
Run Code Online (Sandbox Code Playgroud)

当方法调用超过80或100个字符的行长度时,将完成此包装.每行缩进一级,并且只包含一个参数,选择器部分直到相应的:.因此,线不是结肠对齐的.

如果行长度低于80或100个字符,则不进行换行:

[self shortMethod:withAnArgument];
Run Code Online (Sandbox Code Playgroud)

是否有可以调整以支持此样式的代码格式化程序?如果是这样,哪个更重要的是,如何

code-formatting objective-c

10
推荐指数
1
解决办法
2974
查看次数

从PNG文件的UIImage制作时,视频的颜色是错误的

我从Png文件中获取UIImage并将其提供给videoWriter.

avAdaptor appendPixelBuffer:pixelBuffer

当最终结果视频出来时,它似乎缺少一种颜色,缺少黄色或其他东西.

我采用了使像素缓冲区脱离UIImage的功能

CVPixelBufferCreateWithBytes(NULL,
                             myWidth,
                             myHeight,
                             kCVPixelFormatType_32BGRA, 
                             (void*)CFDataGetBytePtr(image), 
                             CGImageGetBytesPerRow(cgImage), 
                             NULL, 
                             0,
                             NULL, 
                             &pixelBuffer);
Run Code Online (Sandbox Code Playgroud)

我也尝试了kCVPixelFormatType_32AGRB和其他人,它没有帮助.

有什么想法吗?

iphone video

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