也许我在这里遗漏了一些东西.
我正在尝试获取div具有多个背景的元素()的当前背景信息,使用longhand设置background-repeat,background-position和background-image.
使用jQuery,我只var bPos = $('#element').css('background-position')需要获取当前位置的集合,这将给我类似于'0 0, 100px 100px, left bottom'Firefox和Chromium(目前分别是版本5和12),但在Safari(OS-X版本5)中它只返回第一个值对('0 0').这些CSS值在外部样式表中设置.
有没有人知道为什么会这样,以及如何在Safari中获取完整的值对(使用速记background属性也不会这样做)?
编辑:
以下是外部样式表中使用的CSS:
#page{
background-repeat: repeat-x, repeat-x, repeat-x, repeat-x, repeat-x;
background-image: url('../images/line.png'), url('../images/line.png'), url('../images/line.png'), url('../images/line.png'), url('../images/line.png');
background-position: 0 798px, 0 653px, 0 125px, 0 88px, 0 78px;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,我在jsFiddle上为此做了一个测试用例,并将其报告为jQuery 错误,因为它似乎是可重现的行为(虽然我接受它可能是一个浏览器实现问题,而不是实际上是一个jQuery错误).
不过,如果有人有任何想法......
编辑:
jQuery票据已经关闭 - 我认为这是一个Safari bug - 我不太清楚如何从这里走得更远,但我已经发布了一个关于Apple的错误报告.
编辑:
正如Sindre Sorhus所指出的,这似乎已在Safari 5.1中得到纠正.
甚至有可能吗?我希望能够创建一个侦听器,该侦听器将收到有关位置权限更改的通知(无论应用程序是否触发它们)。据我所知,有获取当前权限状态的方法和请求权限的方法,但没有任何方法可以简单地允许应用程序监听更改。
例如,在 iOS 中,我们可以在 a 上设置一个委托,CLLocationManager然后通过locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)在授权状态的任何更改上调用该委托。有谁知道 Android 中的任何等价物(最好与 API >= 17 兼容)?
为此,我将手势识别器附加到我的按钮容器视图中。
\n\n只要我的按钮是UIButtons (即点击按钮本身会导致TouchUpInside按钮上的事件,点击按钮容器中的其他任何位置不会执行任何操作,点击单元格中按钮容器外部的任何其他位置,就会导致待选择的单元格)。但是,如果我使用 aUIControl而不是 a UIButton,则情况不再是 \xe2\x80\x94,控件永远不会响应点击(按钮容器始终消耗点击,并且在单元格中的按钮容器外部点击,导致单元格待选择)。应该注意的是,如果我没有将手势识别器添加到按钮容器中,则控件将以与UIButton.
我唯一的解释是 a UIButton(继承自UIControl)以某种方式添加了一些额外的触摸处理。在这种情况下,我想知道它的作用以及应该如何模拟它(我需要使用 aUIControl而不是 a UIButton,因为我的按钮有一个自定义视图层次结构,我不想在UIButton)。
下面的视图控制器代码应该允许任何人重现该问题:
\n\nclass ViewController: UITableViewController, UIGestureRecognizerDelegate {\n\n lazy var containerView: UIView = {\n let view: UIView = UIView()\n view.backgroundColor = UIColor.redColor()\n view.setTranslatesAutoresizingMaskIntoConstraints(false)\n view.addSubview(self.buttonContainerView)\n view.addConstraints([\n NSLayoutConstraint(item: self.buttonContainerView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.LeadingMargin, multiplier: …Run Code Online (Sandbox Code Playgroud) 我没有找到任何关于此的信息,可能没有简单的解决方案.
我有一个滚动视图(在这个例子中是一个UITableView),这是我的UIViewController视图的第一个子视图(它本身不是一个滚动视图).这个视图控制器在UINavigationController中,我还添加了一个UIToolBar作为视图控制器视图的第二个子视图.表视图和工具栏都使用autolayout在视图控制器的视图中定位和调整大小(表视图填充视图,工具栏固定到视图控制器的bottomLayoutGuide).
据我了解,导航栏和工具栏(固定在视图底部)应该影响视图控制器的topLayoutGuide和bottomLayoutGuide,并通过这种影响包含滚动视图的contentInset.
导航栏正在被考虑(通过topLayoutGuide和automaticAdjustsScrollViewInsets),以便我的表格视图内容在其下方滚动,但在其下方可见,但我的UIToolBar不是 - 通过bottomLayoutGuide或者自动调整ScrollViewInsets.即使我使用框架(不使用约束)定位工具栏,此行为也是相同的.
我是否认为布局指南应考虑固定在视图控制器视图底部的UIToolBar?如果是这样,有没有人有任何想法,为什么它不是?
如果没有,是否有任何地方(amy方法),我可以手动将收费栏框架添加到bottomLayoutGuide,以便它自动传播自动AdjustsScrollViewInsets?如果没有,以什么方法最好手动设置表视图的内容插入?
这似乎是一个显而易见的问题,但我的谷歌搜索没有给我一个明确的答案 - 显然,核心数据 NSInMemoryStoreType存储的想法是将整个图形存储在内存中,所以假设这将是一个合乎逻辑的假设对任何时候都可以存储的对象数量的严格限制 - 是这种情况吗?或者这个商店是否实现了某种智能磁盘缓存方法来克服这个问题?(如果有人有任何轶事证据表明它在iOS设备上的容量,最好是iPhone 4S以上,那也是受欢迎的).
我正在尝试使用一些协议组合用于依赖注入,但我遇到了一个问题,我怀疑可能没有我想要的解决方案,但我无法看到其逻辑原因:
protocol DM1 {
func sayHi() -> Void
}
protocol DM2 {
func sayHello() -> Void
}
protocol VM1 {
typealias T: DM1
var dm: T { get }
}
protocol VM2 {
typealias T: DM2
var dm: T { get }
}
protocol RT: VM1, VM2 {
}
class James {
let rt: RT
init(rt: RT) {
self.rt = rt
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致错误" 协议'RT'只能用作通用约束,因为它对rt实例变量和实例化参数具有自我或相关类型要求 " James.我真的不明白为什么我不能在James课堂上使用这个通用要求.
我最初做过类似的事情:
protocol DM1 {
func sayHi() -> …Run Code Online (Sandbox Code Playgroud) 根据文档 CLLocationManagerDelegate
从启动相应位置服务的线程中调用委托对象的方法。该线程本身必须具有活动的运行循环,就像在应用程序主线程中找到的那样。
我不清楚这是否意味着要在后台线程上接收位置管理器更新,我们必须在该后台线程上实例化位置管理器还是直接startUpdatingLocation()在该线程上调用方法。
无论如何,这解释了当a 从后台线程上启动时没有收到来自的任何事件时的问题:CLLocationManagerDelegateCLLocationManager
该线程本身必须具有活动的运行循环
如果我理解运行循环的功能正常,那么所有NSThreads运行循环都会实例化,但是只有在为线程分配一些工作后,运行循环才会运行。因此,要CLLocationManager在后台线程上正确发送事件,我们需要将线程的运行循环设置为永久循环,以便它可以在CLLocationManager调用到达时处理它们。
这个问题提出了一种确保运行循环正在运行的合理解决方案,但是作者暗示这是一种处理器昂贵的方式。
另外,根据线程文档,
就内存使用和性能而言,线程化会给您的程序(和系统)带来实际成本
我很欣赏我们都通过使用Grand Central Dispatch来使用大量线程,但是Grand Central Dispatch可能会减轻其内部线程管理中的许多麻烦。
所以我的第一个问题是,是否值得通过连续运行的运行循环设置后台线程,以便在后台线程上处理位置事件,或者与离开管理器相比,这会涉及不合理的额外处理量吗?在主线程上?
其次,如果值得的话,是否有使用Grand Central Dispatch进行此操作的好方法。据我了解的文档,Grand Central Dispatch管理自己的线程,而我们无法知道给定块将在哪个线程上执行。我想我们可以简单地执行通常的运行循环代码,以使我们CLLocationManager实例化的任何线程的运行循环都在循环中连续运行,但是这可能不会影响独立分配给Grand Central Dispatch的其他任务吗?
multithreading nsthread grand-central-dispatch cllocationmanager swift