小编TRG*_*TRG的帖子

动画UIView是隐藏的子视图

我有一个UIView EmptyCollectionView,当我的UICollectionView为空时我会显示它.我的工作方式是我创建UIView并addSubview在ViewController的viewDidLoad中,然后根据需要更改视图(以及collectionview)的toggle属性.

我想稍微改进一下我现在的核心功能正常工作,我不想在我的空视图中包含的子视图中添加一些微妙的动画,例如imageview在显示屏上显示包含的反弹.

所以我的问题是,检测何时UIView被显示的最佳方法是什么(即viewDidAppear我可以使用哪种类型的回调)?

补充问题:我是新手...添加空视图并切换isHidden属性这是一个很好的方法吗?或者我应该以不同的方式做到这一点?(即我应该根据需要创建和销毁视图,而不是保持它)

谢谢

uiview ios swift swift3

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

UIStackView 无需分配或填充

我在我的应用程序上有一个视图,我需要能够推送动态数量的自定义子视图(视图数量在运行时会发生变化)。

我最初的想法是一个 tableview,但它似乎有点 OTT 设置所有委托方法。然后我发现了 UIStackView,它很棒,因为它在我添加和删除子视图时处理重绘和调整大小。

但是,当我在 UIStackView 中有少量视图时。它要么使每个视图垂直变大以填充空间,要么根据各种设置将它们分布在堆栈视图中。

我想要的是我添加的每个视图都附加在堆栈中的任何现有视图下。我不想分配或填充堆栈中的空白空间。有点像一个 UIStackView,每个子视图都有一个高度约束。

我认为这在堆栈视图中是不可能的,那么还有什么方法可以实现呢?毕竟我是否必须使用 tableview(或回退到在代码中进行布局?)

uitableview ios swift uistackview

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

Snapkit:将多个限制为边距

我正在使用Snapkit来简化我的自动布局代码,但是似乎经常弹出一种情况,我想知道是否有一种方法涉及更少的代码。

因此,假设我需要将a的边缘固定UIView在其超级视图边距上,我们可以执行以下操作:

subView.snp.makeConstraints { make in
    make.top.equalTo(parentView.snp.topMargin)
    make.bottom.equalTo(parentView.snp.bottomMargin)
    make.left.equalTo(parentView.snp.leftMargin)
    make.right.equalTo(parentView.snp.rightMargin)
}
Run Code Online (Sandbox Code Playgroud)

这基本上导致子视图填充父视图,除了由父视图布局边距定义的少量填充外,我敢肯定这种变化很普遍。

对于该库,这似乎过于冗长。它有一些非常好的辅助方法,例如这些

make.edges.equalToSuperview()
make.top.left.right.equalToSuperview()
Run Code Online (Sandbox Code Playgroud)

但是,我在他们的文档中没有找到关于边距的上述两种辅助方法。

我正在寻找的(如果存在)类似于以下内容:

make.edges.equalToSuperview().withMargins()
make.top.left.right.equalToSuperview().withMargins()
make.top.left.right.equalTo(someview).withMargins()
Run Code Online (Sandbox Code Playgroud)

那么,除了非常冗长的方法之外,还有其他方法吗?我是否在文档中缺少某些内容,或者可以通过扩展添加?

autolayout swift swift3 snapkit

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

领域添加对象并更新 - 忽略缺失值

我的主要问题是:

有没有一种方法可以为领域模型指定默认值,该默认值仅在从新创建模型时使用,但在领域自动从调用更新模型时被realm.add(thing, update: true)忽略



这是一些上下文信息...

我有一个导入器脚本,它从 API 中提取大量数据并将其导入领域。忽略所有不相关的循环和嵌套结构,我基本上有这个:

let thing = SomeThing(value: [
    "id" : jsonData["id"].int!,
    "title" : jsonData["title"].string!,
    "system" : system
])

try! realm.write {
    realm.add(thing, update: true)
}
Run Code Online (Sandbox Code Playgroud)

我的SomeThing模型如下所示:

class SomeThing : Object {

    dynamic var id = 0
    dynamic var title = ""
    dynamic var system : System?

    dynamic var favourited = false

    override static func primaryKey() -> String? {
        return "id"
    }    
}
Run Code Online (Sandbox Code Playgroud)

favourited布尔值不是由 API 提供的,而是在用户收藏该对象时更新。然而,由于模型默认值为 false,因此当领域发现事物已存在时,它会更新值并将其重置favouritedfalse …

realm ios swift

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

具有单例的领域线程安全对象

所以我有一个单例类来管理登录到我的应用程序的当前用户.

看起来像这样

class SessionManager {
    static let shared = SessionManager()

    var loggedInUser: User?
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我想从后台线程获取该用户对象,我不能因为我得到以下异常:

'RLMException', reason: 'Realm accessed from incorrect thread.'
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,我找到了线程安全参考.所以我改变了我的课程,改为:

class SessionManager {
    static let shared = SessionManager()

    private var threadSafeUser: ThreadSafeReference<User>?

    var loggedInUser: User? {

        get {

            if nil === self.threadSafeUser {
                return nil
            } else {
                let realm = try! Realm()
                return realm.resolve(self.threadSafeUser!)!
            }            

        }

        set {

            if nil === newValue {
                self.threadSafeUser = nil
            } else {
                self.threadSafeUser = ThreadSafeReference(to: newValue!)
            }

        }

    } …
Run Code Online (Sandbox Code Playgroud)

multithreading thread-safety realm swift3

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

计算 45 度捕捉的坐标

我有一个 SVG 在原点和鼠标指针之间画一条线,我想做的是当按下 shift 时(event.shiftKey === true)使线“对齐”到最近的 45 度坐标,基本上与您在 Photoshop 中获得的行为相同。

我已经设法计算出两点之间的角度(所以我也可以决定要捕捉哪个角度,如果需要,可能会使用 IF/ELSE 树)但是我不知道我如何重新计算“结束”坐标基于新的度数。

我在这里设置了一个简化的例子:https : //jsbin.com/sohafekije/2/edit?html,js,output

我还拍了一张我正在尝试重新创建的 photoshop 行为的照片(质量很差,因为我不得不使用相机,因为我无法截屏 - 抱歉)只是为了 100% 清晰:http://i。 imgur.com/Yo04uxY.jpg

在此处输入图片说明

本质上,我正在尝试重新创建您在按住 shift 键时在 photoshop 中获得的行为,但我猜您需要非常擅长数学才能找到解决方案,而我不是!

任何帮助是极大的赞赏 :)

var app = document.getElementById('app'),
    svg = SVG(app),
    line = svg.polyline([]).fill('none').stroke({ width: 1 }),
    start = [250,250],
    end = null,
    angleTxt = document.getElementById('angle'),
    lineLengthTxt = document.getElementById('linelength');

line.marker('start', 10, 10, function(add) {
  add.circle(10).fill('#f06')
})

// On mouse move, redraw the line
svg.on('mousemove', function(e){
  end = [e.layerX, e.layerY];
  line.plot([start, …
Run Code Online (Sandbox Code Playgroud)

javascript math svg svg.js

0
推荐指数
1
解决办法
864
查看次数