小编Cab*_*bus的帖子

使用CollectionView复制iOS7消息App UIKitDynamics

我知道有很多关于如何使用UIKitDynamics实现一个有弹性的collectionViewLayout的教程和讨论.

甚至有一个WWDC 13 Session视频解决了在iOS7消息应用程序中复制"消息气泡"的确切主题.

我在会话视频之后创建了自己的"弹性布局"并使用本教程,该教程还提供了实现平铺机制的详细信息,这确保了即使有数千个单元格也能顺利运行.

但是,结果仍然与我们在消息应用程序中看到的非常不同,我的目标是将EXACT SAME BEHAVIOR复制为消息应用程序.

  1. 无论我为UIAttachmentBehavior物业(长度,阻尼,频率)提供多少不同的值,我都无法获得正确的弹跳.
    会话视频说,为长度设置值> 0会破坏事物,因为单元格不会返回到它们的实际位置.但是,我只能通过设置~0.5长度来重现消息应用程序显示的平滑和快速减速?
  2. 当collectionView到达它的边界时,消息应用程序中的最后几个气泡有一个很好的夸张反弹,我的"教程实现"根本就没有反弹.

开发人员论坛中有一个讨论:Apple Dev论坛讨论

有人建议每个Cell使用多个UIAttachmentBehaviors,其他人说应用UIView - spring动画可以给你这个想要的效果.甚至假设消息应用程序根本不使用UIKitDynamics + UICollectionView.(我怀疑Apple没有使用这种明显的技术)

所以我的问题是:有没有人成功实现了Message bubbles行为的精确复制?我还能做些什么来获得有关此主题的答案?

objective-c ios uicollectionview uicollectionviewlayout uikit-dynamics

11
推荐指数
0
解决办法
1869
查看次数

缺少Swift 3变异函数('... inPlace'方法)

在Swift 2.3中,我们可以这样编写:

var rect = CGRect(...)
rect.offsetInPlace(dx: 15, dy: 0)
Run Code Online (Sandbox Code Playgroud)

将一个矩形15pt向右移动.

但是在Swift 3中,似乎这个函数不再存在.在检查CGRect界面时,我们只能看到非变异变体offsetBy(dx:, dy:).在我们通常使用变异函数(命名...inPlace)的所有地方也是如此.我已经在GitHub上搜索了Swift evolution repo,但是找不到任何关于这个的注释.

是否删除了变异变体?剩余的功能是否会根据是否使用返回值自动变异?恕我直言,如果它们实际上已被删除,那将是一种耻辱,因为它们在进行基于代码的布局时曾经非常方便.

swift swift3

7
推荐指数
2
解决办法
2817
查看次数

使用 Node.js 和 bullmq 部署 API 的流程布局

让我在问题前言说,我理解这个主题可能不会有明确的、是或否的答案,并且给出的答案可能是观点驱动的。但是,我确实需要并感谢您在部署和操作以下 API 设计方面的建议和/或指导。

我正在做什么

对于我的 SaaS,我想通过 API 向我的客户提供其功能。SaaS 提供的任务是一项长期运行且计算成本高昂的任务。因此,不幸的是,运行一个简单的“同步”API(其中调用者等待此任务的结果作为对其请求的响应来传递)是不合适的。相反,我选择了一种方法,让调用者安排Jobs并定期查询 API 以查看给定的作业是否已完成。我对这个设计非常满意。

到目前为止我做了什么

为了实现,我构建/使用了以下技术:

  • Node.js服务器
  • Express用于 API 和路由的 npm 包
  • Redis用于作业调度的数据库
  • bullmq用于 Redis 连接和队列管理的 npm 包

使用bullmq,我创建一个队列Queue并将其添加Jobs到该队列中,以响应对给定端点的调用。

对我来说,这是api.ts(缩短):

import Express from "express"
import { Queue } from "bullmq"

const api = Express()
const queue = new Queue("com.mysaas.workerQueue")

api.post("/job", async (request, response) => {
    var data, jobId
    ...

    await queue.add("com.mysaas.defaultJob", data, {
        jobId: jobId,
        removeOnComplete: true,
        ...
    }) …
Run Code Online (Sandbox Code Playgroud)

api-design node.js node-redis pm2 bullmq

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

Chris Banes PullToRefreshListView与自定义适配器错误

我正在设置自定义ListView.

pull-to-refresh功能直接来自https://github.com/chrisbanes/Android-PullToRefresh

ListView显示图像,所以我创建了一个自定义适配器:

class mAdapter extends BaseAdapter{

    public mAdapter(Context context){
        // nothing to do
    }

    @Override
    public int getCount() {
        return mValues.size();
    }

    @Override
    public Object getItem(int position) {
        return mValues.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean areAllItemsEnabled() 
    { 
            return false; 
    }

    @Override
    public boolean isEnabled(int position) 
    { 
            return false; 
    } 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if(v == null){
            LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-adapter custom-adapter pull-to-refresh

4
推荐指数
1
解决办法
2482
查看次数

Swift @autoclosure 参数包装提供的显式闭包

考虑以下函数:

func whatever(foo: @autoclosure () -> Int) {
  let x = foo()
  print(x)
}
Run Code Online (Sandbox Code Playgroud)

当然,我们可以这样调用它:

whatever(foo: 5)
// prints: 5
Run Code Online (Sandbox Code Playgroud)

然而,提供显式的闭包参数会导致编译器抱怨:

whatever(foo: { 5 })
// Error: Function produces expected type 'Int'; did you mean to call it with '()'?
Run Code Online (Sandbox Code Playgroud)

这是有意的吗?阅读文档时,@autoclosure我没有找到关于参数是否始终被包装的声明,即使在提供闭包时也是如此。我的理解@autoclosure是:
采用闭包论证。如果参数不是闭包,但与闭包返回的类型相同,则将其包装。
然而,我看到的行为是:无论如何都要结束争论。

一个更详细的例子让我觉得这很奇怪:

struct Defaults {

  static var dispatcher: Defaults = ...

  subscript<T>(setting: Setting<T>) -> T { ... }

  struct Setting<T> {
    let key: String
    let defaultValue: () -> T

    init(key: String, …
Run Code Online (Sandbox Code Playgroud)

closures swift

4
推荐指数
1
解决办法
2991
查看次数

UIBezierPath指向路径的分数

鉴于任意UIBezierPath,我正在寻找一种方法来获得该路径长度的一小部分.

例:

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(200.0, 200.0)];
[path addLineToPoint:CGPointMake(200.0, 400.0)];

CGPoint p = [path pointAtFraction:0.5];
Run Code Online (Sandbox Code Playgroud)

p应该是{x: 200.0, y: 300.0}这种情况.

我知道这个简单的例子可以计算,但我正在寻找一个适合ANY的解决方案UIBezierPath(弧形,圆形反射等)

看到CAShapeLayer,基本上生活UIBezierPath和它的属性strokeEnd,我想信息是在路径对象内的某个地方.但是,接口UIBezierPathCGPathRef接口都没有显示任何实现此目的的方法.

我尝试创建一个CAShapeLayer,设置strokeEndCGPathRef从图层中检索,但路径保持不变.

有没有办法(公共API)实现这一目标?

objective-c ios uibezierpath quartz-core

3
推荐指数
1
解决办法
1043
查看次数

使用SpriteKit滚动游戏场景

简而言之:如何制作不是无限滚动的gameScene?

我将通过一个示例来说明我要实现的目标:爬坡比赛

在这个游戏中,您在山上驾驶汽车(实际上是任何疯狂的汽车;)。
现在,关于游戏的一件特别的事情我无法理解:

很明显,每个阶段的轨迹都不是随机布置的。即,每次播放时,曲目的路线总是相同的。

我想学的是:

  • 您如何创建这样的滚动游戏场景?它是滚动的巨大背景节点,还是涉及某种花式拼贴?

我的游戏需要滚动两个轴(x,y)。玩家节点始于游戏区域的中心,并且可以四处移动。该区域周围散布着一些障碍,其中有些障碍最初并不可见,因为它们位于“游戏世界”的边缘。



我想最简单的解决方案是使用一个大的后台节点,但是这将如何影响游戏的内存消耗?

谢谢你的帮助!

ios sprite-kit

3
推荐指数
1
解决办法
659
查看次数