小编Ogr*_*amp的帖子

转换为int vs floor

这些之间有什么区别:

float foo1 = (int)(bar / 3.0);
float foo2 = floor(bar / 3.0);
Run Code Online (Sandbox Code Playgroud)

据我所知,两种情况都有相同的结果.编译代码有什么区别吗?

c c++ floating-point

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

正确使用Alamofire的URLRequestConvertible

我已经阅读了@mattt的几篇教程,README,但无法弄清楚几件事.

  1. URLRequestConvertible现实世界API 的正确用法是什么?看起来我是否会通过URLRequestConvertible为所有API 实现协议来创建一个路由器- 它几乎不可读.我应该每个端点创建一个路由器吗?

  2. 第二个问题很可能是由于缺乏使用Swift语言的经验造成的.我无法弄清楚为什么enum用于构建路由器?为什么我们不使用静态方法的类?这是一个例子(来自Alamofire的README)

    enum Router: URLRequestConvertible {
        static let baseURLString = "http://example.com"
        static let perPage = 50
    
        case Search(query: String, page: Int)
    
        // MARK: URLRequestConvertible
    
        var URLRequest: NSURLRequest {
            let (path: String, parameters: [String: AnyObject]?) = {
                switch self {
                case .Search(let query, let page) where page > 1:
                    return ("/search", ["q": query, "offset": Router.perPage * page])
                case .Search(let query, _):
                    return ("/search", ["q": query])
                }
            }()
    
            let URL = NSURL(string: Router.baseURLString)! …
    Run Code Online (Sandbox Code Playgroud)

ios swift alamofire

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

链UIView动画与时间间隔

我需要动画3个UIViews(淡入/淡出).1个动画持续时间为0.6秒(淡入/淡出周期为0.6 + 0.6秒).但我需要在0.2秒内启动动画.

  • 第一个动画应该在0.0秒内启动.
  • 第二个动画应该在0.2秒内启动.
  • 第3个动画应该在0.4秒内启动.

并且所有这些都应该"无限期地"循环(直到某些触发).

我现在所拥有的:

- (void)playAnimation {
    isAnimated = YES;
    [self animateView:firstView afterDelay:0.0];
    [self animateView:secondView afterDelay:0.2];
    [self animateView:thirdView afterDelay:0.4];
}

- (void)stopAnimation {
    isAnimated = NO;
}

- (void)animateView:(UIView *)animatedView afterDelay:(float)delay {
    if(isAnimated) {
        [UIView animateWithDuration:0.6 delay:delay options:UIViewAnimationOptionTransitionNone
                     animations:^ {
            animatedView.alpha = 1.0;
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:0.6 animations:^ {
                animatedView.alpha = 0.0;
            } completion:^(BOOL finished) {
                [self animateView:animatedView afterDelay:0.0];
            }];
        }];
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码无法预测.有时视图动画的工作方式与我想要的一样(相位为0.2秒),有时它会在同一时间开始......这样做的正确方法是什么?我也尝试afterDelay:从方法签名中删除部分并启动类似的效果:

[self performSelector:@selector(animateView:) withObject:thirdView afterDelay:0.6];
Run Code Online (Sandbox Code Playgroud)

更新
我注意到当重型网络设备在后台运行时(使用AFNetworking加载大图像)动画"中断".我不介意动画会"冻结"一点(虽然我更喜欢没有延迟)但我真的想保持所有动画的相位相关(相同的相位差).

为了使问题更容易理解,我添加了图表.Y是alpha,X是时间.前3个图 - …

iphone core-animation uikit ios objective-c-blocks

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

将NSDate保存到CoreData上下文时出现问题

我正在尝试使用属性类型Date之一保存托管对象managedObjectContext.

代码如下:

reminder.eventDate = selectedDate;
NSLog(@"Date: %@", selectedDate);
NSError *error = nil;
if (![reminder.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
Run Code Online (Sandbox Code Playgroud)

在上下文保存程序中使用SIGABRT崩溃.这是一个控制台日志:

2011-02-28 00:50:18.817 MyApp[9021:207] *** Terminating app due to uncaught 
exception 'NSInvalidArgumentException', reason: '-[__NSDate isEqualToString:]: 
unrecognized selector sent to instance 0x4e73490'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x01057be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x011ac5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x010596fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00fc9366 ___forwarding___ + 966 …

iphone core-data objective-c ios

8
推荐指数
3
解决办法
5107
查看次数

用于学习最佳编码实践的开源iOS项目

我有一些iOS开发经验(更多Java背景),最近我开始阅读"清洁代码".

我注意到在我的iOS项目中我有很多反模式.

2个最受欢迎的建议我没有正确遵循:小方法小类.然后我对GitHub做了一些小研究,我找不到可以用作"清洁代码"的示例/参考的项目.

在大多数情况下,ViewControllers有数十种方法,并且它们具有巨大的方法,例如loadView我们以编程方式构建视图层次结构.

例如来自Facebook的示例应用程序wishlist-mobile-sampleHomeViewController类中有1431行代码,并且它loadView有170多行代码.

您是否有链接到您建议的项目作为一个非常好的编码示例?

iphone coding-style objective-c ipad ios

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

从协议扩展调用选择器

我建立简单的主题引擎,并希望有一个扩展,它增加了UISwipeGestureRecognizerUIViewController

这是我的代码:

protocol Themeable {
    func themeDidUpdate(currentTheme: Theme) -> Void
}

extension Themeable where Self: UIViewController {
    func switchCurrentTheme() {
        Theme.switchTheme()
        themeDidUpdate(Theme.currentTheme)
    }

    func addSwitchThemeGestureRecognizer() {
        let gestureRecognizer = UISwipeGestureRecognizer(target: self, action:#selector(Self.switchCurrentTheme))
        gestureRecognizer.direction = .Down
        gestureRecognizer.numberOfTouchesRequired = 2
        self.view.addGestureRecognizer(gestureRecognizer)
    }
}
Run Code Online (Sandbox Code Playgroud)

当然编译器找不到,#selector(Self.switchCurrentTheme)因为它没有通过@objc指令公开.是否可以将此行为添加到我的扩展程序?

UPDATE: Theme是一个Swift枚举,所以我不能@objcThemeable协议前添加

ios swift swift2 protocol-extension

8
推荐指数
2
解决办法
1579
查看次数

已获取iOS应用名称

我已经完成了应用并准备将其提交给ap商店.在选择名字之前,我在美国,新加坡和爱尔兰的应用程序商店进行了搜索,但没有找到任何名称相同或相似的应用.所以我订购了logo,splashscreen,创建了网站,制作了截屏视频,注册了FB和Twitter账号.当然我到处都使用我的应用名称.想象一下,当iTunes Connect告诉我名字被采取时,我感到很惊讶!我搜索过网络,发现几年前有人发布了同名的游戏!游戏已经离开了应用商店,但名称仍然无法使用.我试图找到开发者的联系人,发现她的Facebook和Twitter.但看起来帐户已经没有被使用.我没有找到她的邮件......

你对我能做些什么有什么建议吗?我认为可能是iPadAppName而不是AppName会保存情况.但后来我需要更改splashscreen,网站,FB和推特等.

谢谢!

itunesconnect app-store ipad ios

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

Objective-C类命名约定与Uncle Bob

Chapter 2: Meaningful Names叔叔鲍勃写道:

不要添加无偿的上下文

在一个名为"Gas Station Deluxe"的想象应用程序中,为每个类添加前缀是个坏主意GDS.坦率地说,你正在反对你的工具.您键入G并按下完成键,并获得系统中每个类的一英里长的列表

实际上,这是我在一年多前使用Objective-C的第一天发现的.在Java之后它非常令人失望,但我认为我只是一个对此感到恼火的人:)我明白,"清洁代码"一书大部分时间都指Java,而Java与Objective-C不同,它具有命名空间(包).

如果您正在构建应用程序而不是库,那么您是否在课程中使用了2-3个字母前缀?你觉得怎么样,语言设计不好,语言"功能"还是鲍勃叔叔不在这里?

coding-style objective-c

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

iPhone绘画应用程序(基于glPaint).与白色背景混合

我正在开发绘画应用程序.我试过用CoreGraphics/Quartz 2D和绘图曲线算法做的很慢.所以我们决定改用OpenGL ES.我从未有过任何OpenGL经验,所以我从苹果中找到了glPaint示例并开始玩它.

我改变了erase方法做白色背景.我如何坚持刷和混合.在示例中,Apple使用"白色黑色"纹理作为画笔(首先在下面的图片中).但它对我不起作用(我使用不同的混合模式).所以我决定使用不同的画笔,但我找不到合适的方法.我在stackoverflow上发现了一些问题,但是所有问题都没有得到答复.这是一张照片(来自另一个问题,感谢Kevin Beimers). 结果http://www.straandlooper.com/GLPaint.png

所以问题是如何在图片中实现类似"所需"的笔画.如何将2个笔画更接近现实生活体验(蓝色比黄色=深绿色).

谢谢.

刷子的当前代码(从glPaint修改的位)(来自initWithFrame方法:

// Make sure the image exists
if(brushImage) {
  // Allocate  memory needed for the bitmap context
  brushData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));
  // Use  the bitmatp creation function provided by the Core Graphics framework. 
  brushContext = CGBitmapContextCreate(brushData, width, width, 8, width * 4, CGImageGetColorSpace(brushImage), kCGImageAlphaPremultipliedLast);
  // After you create the context, you can draw the  image to the context.
  CGContextDrawImage(brushContext, CGRectMake(0.0, …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es objective-c ipad

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

ScrollView 内的 ForEach 不占用整个宽度

我正在尝试使用 SwiftUI 重新创建我当前应用程序的 UI。而且这比我最初的难度要大得多。我想实现带有一些背景的卡片式单元格。我发现这List不支持,至少目前是这样。List是如此有限 - 它不允许您移除细胞分离器。

所以我搬到了ForEach里面ScrollView。我想这不应该用于长表的生产,但现在应该可以使用。我遇到的问题是ForeEach视图没有采用所有ScrollView提供的宽度。我可以设置.frame(...)修饰符,但这需要我绝对不想做的硬编码宽度。

任何想法如何强制VStack采用 ScrollView 的全宽?我试图使用ForeEach没有VStack与它有同样的问题。似乎ScrollView(父视图)“告诉”它的子视图(VStack)它的框架小于实际ScrollView的框架。并基于该信息子视图构建其布局和大小。

这是我目前的结果:

这是代码:

struct LandmarkList : View {
    var body: some View {
        NavigationView {
            ScrollView() {
                VStack {
                    Spacer().frame(height: 160)
                    ForEach(landmarkData) { landmark in
                        LandmarkRow(landmark: landmark).padding([.leading, .trailing], 16)
                    }
                }.scaledToFill()
                .background(Color.pink)
            }
            .background(Color.yellow)
            .edgesIgnoringSafeArea(.all)
            .navigationBarTitle(Text("Landmarks"))

        }
    }
}

struct LandmarkRow : View {
    var landmark: Landmark …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

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