小编all*_*loy的帖子

使Xcode自动链接静态库中对象所需的库

我有一个xcode项目,其目标是构建一个'Cocoa Touch Static Library',用户可以从她的app项目成功依赖这个项目并链接到库.

但是,存档中的某些对象依赖于其他库,因此用户必须自己将这些对象添加到应用程序项目中.有没有办法让Xcode消除这一步骤?即,我可以在库的项目中指定它依赖哪些库然后自动链接到应用程序?(在库项目中,或作为xcconfig文件,或任何其他工作.)

xcode linker static-libraries

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

SceneKit - 交叉渐变材质属性纹理

的文档 SCNMaterialProperty.contents状态表明它是一个可动画的属性,实际上我可以在两种颜色之间执行交叉渐变.但是我无法在两个图像之间交叉淡入淡出.

所以我开始怀疑这是否可行,或者我是否需要为此创建自定义着色器?


我尝试了一个隐式动画,在这种情况下它会立即显示'after'图像:

node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"before"];
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:5];
node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"after"];
[SCNTransaction commit];
Run Code Online (Sandbox Code Playgroud)

一个显式动画,它什么都不做:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"contents"];
animation.fromValue = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
animation.toValue = (__bridge id)[UIImage imageNamed:@"after"].CGImage;
animation.duration = 5;
[node.geometry.firstMaterial.diffuse addAnimation:animation forKey:nil];
Run Code Online (Sandbox Code Playgroud)

除了通过a CALayer,它什么都不做:

CALayer *textureLayer = [CALayer layer];
textureLayer.frame = CGRectMake(0, 0, 793, 1006);
textureLayer.contents = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
node.geometry.firstMaterial.diffuse.contents = textureLayer;

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"contents"];
animation.fromValue = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
animation.toValue = (__bridge id)[UIImage imageNamed:@"after"].CGImage;
animation.duration = …
Run Code Online (Sandbox Code Playgroud)

core-animation opengl-es scenekit

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

如何在遥远的过去,BC时代创造一个特定的日期

我正试图在不列颠哥伦比亚省时代建立一个约会,但是很难失败.以下返回'4713'作为年份,而不是'-4712':

  NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
  NSDateComponents *components = [NSDateComponents new];
  [components setYear: -4712];
  NSDate *date = [calendar dateFromComponents:components];
  NSLog(@"%d", [[calendar components:NSYearCalendarUnit fromDate: date] year]);
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

更新:工作代码

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [NSDateComponents new];
    [components setYear: -4712];
    NSDate *date = [calendar dateFromComponents:components];
    NSDateComponents *newComponents = [calendar components:NSEraCalendarUnit|NSYearCalendarUnit fromDate:date];
    NSLog(@"Era: %d, year %d", [newComponents era], [newComponents year]);
Run Code Online (Sandbox Code Playgroud)

正如本解释的那样,这为时代打印0.

cocoa nsdate nsdatecomponents

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

如果对角线滑动是针对水平UIScrollView还是嵌套垂直UIScrollView,请控制?

如何控制UIScrollView上的滑动是否已将足够大的Y delta视为垂直滑动并让它由嵌套的UIScrollView(UIWebView)处理?

我有一个水平页面的UIScrollView."页面"是一个UIWebView(包含一个UIScrollView),只能垂直滚动.所有内容都已正确设置,以便按预期工作.

但是,我注意到当你尝试快速水平滑动时,你很有可能进行略微对角滑动.如果它只是一点点,滚动视图就像我想的那样处理它,但是偶尔的Y delta足以使嵌套的scrollview(UIWebView)将滑动视为垂直滑动,而X delta可以被认为是大到足以指示水平滑动.

我发现很多旧文章解释说应该覆盖标准的UIResponder触摸方法(例如touchesBegan:withEvent:),但是,现在这些都是由手势识别器处理的.

那么如何影响分页scrollview的平移手势识别器以允许更多的Y delta用于水平滑动?

根据需要,使其成功的一种方法是:

  • delaysContentTouches寻呼滚动视图设置为NO
  • 嵌套scrollviews'平移手势识别器添加对分页scrollview的平移手势识别器的依赖失败.

但是,这会破坏嵌套滚动视图中的垂直滚动,使得在滑动结束并快速完成之前无法识别它们.我怀疑这是因为分页滚动视图的平移手势识别器在触摸结束之前不会失败.

nested uiscrollview swipe diagonal ios6

5
推荐指数
0
解决办法
396
查看次数

如何从webpack插件生成模块并热替换它

我正在尝试为https://github.com/martinandert/babel-plugin-css-in-js编写一个webpack插件,在开发过程中有以下两个要求:

  • 我不希望将文件写入磁盘,而是让webpack-dev-server将文件托管在内存中.
  • 我想热重新加载以加载新提取的CSS.

(问题在底部.)


不要写入磁盘

我已经能够使用以下代码执行此操作,但在阅读了许多不同的示例后,我仍然不能100%确定这是正确的方法.

compiler.plugin('emit', function(compilation, callback) {
  compilation.chunks.forEach(function(chunk) {
    chunk.modules.forEach(function(module) {
      if (module.resource) {
        var css = extractCSSFromFile(module.resource)
        if (css) {
          cache[module.resource] = css
        }
      }
    })
  })
  var source = Object.values(cache).join('')
  compilation.assets[bundleFile] = {
    source: function() { return source },
    size: function() { return source.length },
  }
})
Run Code Online (Sandbox Code Playgroud)

热重装

我的想法是,每当CSS改变时,我都会渲染一个新版本的小模块,迫使样式表重新加载.然后我会让web pack的热模块替换替换该模块,因此实际上对提取的样式表具有HMR.此重新加载模块如下所示:

if (module.hot) {
  module.hot.accept()
  module.hot.dispose(function() {
    document.querySelectorAll('link[href="' + WEBPACK_BABEL_CSS_IN_JS_STYLESHEET_PATH + '"]').forEach(link => {
      link.href = link.href.replace(/(\?\d+)?$/, '?' + WEBPACK_BABEL_CSS_IN_JS_STYLESHEET_HASH)
    })
  })
}
Run Code Online (Sandbox Code Playgroud)

使用最新CSS的哈希生成文件的webpack插件代码如下所示: …

javascript webpack-hmr webpack-plugin

5
推荐指数
0
解决办法
461
查看次数

TypeScript 是否允许类型别名来指定泛型?

我希望能够为一个非常通用的函数添加别名并指定部分通用参数,从而创建同一函数的不太通用的版本。像下面这样:

\n\n
function veryGeneric<X, Y>(someParam: Y): { result: X } {\n  // ...\n}\n\ntype LessGeneric = typeof veryGeneric<X, string>\nconst lessGeneric: LessGeneric = veryGeneric\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望该lessGeneric函数基本上键入为:

\n\n
function lessGeneric<X>(someParam: string): { result: X } {\n  // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这有可能吗?

\n\n

我知道我可以创建一个包装函数,但我宁愿不必再次指定参数类型(并且不必支付另一个函数调用的开销,即使它\xe2\x80\x99s很小,这将是一个额外的好处)。

\n\n
\n\n

这里\xe2\x80\x99s是我处理的真实例子\xe2\x80\x99m。给定一个函数声明(来自react-tracking),如下所示:

\n\n
declare function track<T = {}, P = {}>(trackingInfo?: TrackingInfo<T, P>, options?: Options<Partial<T>>): Decorator\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望能够定义一个别名,指定trackingInfo参数\xe2\x80\x99s 类型,但保留P通用性。即我想要一个别名,\xe2\x80\x99s 本质上键入为:

\n\n
interface ValidAnalyticsEntries {\n  page: string\n  action: string\n}\n\ndeclare function trackSpecificToOurAnalyticsSchema<P …
Run Code Online (Sandbox Code Playgroud)

generics function type-alias typescript

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

需要帮助理解一些Flow类型语法

我正在努力将带有库(Relay)的Flow类型生成器移植到一个发出TypeScript类型的生成器,但是对于一些在我的代码片段中并不明显的Flow语法有一些疑问:

import type { FragmentReference } from 'relay-runtime';
export opaque type TypenameInside$ref: FragmentReference = FragmentReference;
export type TypenameInside = ({|
  +__typename: 'User',
  +firstName: ?string,
  +$refType: TypenameInside$ref,
|} | {|
  +__typename: 'Page',
  +username: ?string,
  +$refType: TypenameInside$ref,
|} | {|
  // This will never be '%other', but we need some
  // value in case none of the concrete values match.
  +__typename: '%other',
  +$refType: TypenameInside$ref,
|});
Run Code Online (Sandbox Code Playgroud)

也就是说,什么是$ref,$refType%other?或者它们不是Flow特定的,而是Relay特定的?

我尝试搜索flowtype docs和repo,但很难找到答案.还将非常感谢与实施文档和/或相关部分的链接.

flowtype relayjs

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

是否允许任意iOS部署目标?

例如,如果我的iOS应用程序需要iOS 7.0.3中引入的修复程序,我是否可以将部署目标设置为7.0.3并将其提交到应用程序商店?

我找不到任何明确的文档,当我设置,构建或存档时,Xcode似乎没有抱怨,但我知道的人没有这样做或者知道是否允许它.

注意:我知道Xcode只在下拉菜单中显示次要版本,但您可以在文本字段中填写任意版本.

具体来说我正在寻找:

  • Apple文档声明它是或不允许定位补丁版本.
  • 个人体验(最近)提交针对补丁版本的应用程序.
  • 如果允许定位修补程序版本,在我将部署目标设置为7.0.3 am的特定示例中我更正了解我应该将基本SDK设置为7.0.0?

deployment settings xcode ios xcode5

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