小编far*_*ski的帖子

UISlider突出显示不同拇指宽度的状态

我正在尝试实现一个自定义UISlider(UISlider的子类),其行为方式与原始滑块类似,当它突出显示时,拇指周围会发出光晕.不过,我遇到了麻烦.

突出显示的拇指的(有效)宽度明显大于正常拇指(由于发光).如果我将透明像素填充添加到正常状态图像,以便两个图像具有相同的宽度,问题是正常状态拇指看起来永远不会到达轨道的末端(它确实到达结尾,但填充使得它看起来不然).

如果我使用thumbRectForBounds:来偏移拇指以正确地与轨道的开头对齐,它只会使问题在另一端变得更糟.

如果我保持两个图像只是它们需要的宽度(即,在正常状态下没有填充,并且两个宽度不同),我已经接近了.我可以在thumbRectForBounds中独立设置偏移量:基于UIControl.state,但看起来幕后有一些数学魔法.UISlider认为这两种状态的图像排列完美的唯一地方就是确切的中心.

看起来我可能需要实现一些数学运算,根据它沿着轨道的相对位置来确定高光状态的偏移.它需要在中心处具有零偏移y(UISlider将使两个图像居中,这意味着它们对齐).在极端情况下,它需要一个完全弥补发光的y偏移.在它之间需要插入y偏移量.

这似乎是很多工作来重新创建原生滑块所做的事情,所以也许我错过了一些明显的东西.

更新 当前解决方案

它不是完全可移植的,因为它会对添加的光晕大小做出一些假设.我正在添加带有图像的光晕而不是直接将其绘制到CALayer.我还没有测试过它的表现如何.

基本上我创建了一个正方形的图层,其尺寸是默认状态拇指图像的高度,以拇指为中心,然后绘制发光(仅发光,而不是带有发光的拇指的单独图像)完成高光状态图像)到图层.

- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
  CGRect r = [super thumbRectForBounds:bounds trackRect:rect value:value];

  [thumbHighlightOverlayLayer removeFromSuperlayer];
  thumbHighlightOverlayLayer = [CALayer layer]; 

  int x = r.origin.x + (r.size.width / 2) - (r.size.height / 2);
  thumbHighlightOverlayLayer.frame = CGRectMake(x, r.origin.y, r.size.height, r.size.height);

  UIImage* thumbHighlightOverlayImage = [UIImage imageNamed:@"thumb-highlight"];
  thumbHighlightOverlayLayer.contents = (id)thumbHighlightOverlayImage.CGImage;

  switch (self.state) {
    case UIControlStateHighlighted:
      [[self layer] addSublayer:thumbHighlightOverlayLayer];
      break;
    default:
      break;
  }

  return r;
}
Run Code Online (Sandbox Code Playgroud)

iphone uikit uislider ios

16
推荐指数
1
解决办法
3197
查看次数

AVAudioSessionDelegate在endInterruption处调用,但未调用beginInterruption

当应用程序启动并将委托设置为appDelegate时,我正在设置AVAudioSession.一切似乎都在工作(播放等),除了当电话接到电话时没有调用委托上的beginInterruption.当呼叫结束时,会调用endInterruption.

我唯一的想法是我以前使用的音频播放器代码基于AVAudioPlayer,但现在使用的是AVPlayer.用于处理中断的AVAudioPlayer委托的回调仍在那里,但它们以任何方式发生冲突似乎很奇怪.

ios avaudiosession avplayer ios6.0

12
推荐指数
1
解决办法
7016
查看次数

后台下载后无法移动文件:"没有这样的文件"

我有一个应用程序使用一个backgroundSessionConfiguration实例NSURLSession来处理一些NSURLSessionDownloadTask任务.任务是正确创建的,并完成下载,但是URLSession:downloadTask:didFinishDownloadingToURL:当我将下载的文件从location磁盘上的永久位置移动时,我有时(读取:经常)得到错误:

NSUnderlyingError=0x178247890 "The operation couldn’t be completed. No such file or directory"
Run Code Online (Sandbox Code Playgroud)

就好像在我有机会移动它之前,下载的文件被清除了临时目录(../Library/Caches/com.apple.nsnetworkd/ ..).

对同一个远程文件运行操作将在所有其他因素相同的情况下两种方式运行,因此我无法识别任何会导致它有时工作的内容.

反正是为了确保这个文件能够长时间保持足够的状态,一旦完成就将其移动到位?

编辑:我也看到了正常(非背景)会话的频率

ios ios7 nsurlsession

12
推荐指数
1
解决办法
6763
查看次数

在Sidekiq任何地方找工作的最佳方式

是否有一种简单的方法可以搜索特定作业的所有sidekiq(队列,重试,日程安排等)?

目前我这样做:

if !Sidekiq::Queue.new("feeds").find {|j| j.args[0] == feed.id && j.args[1] == true }
  if !Sidekiq::RetrySet.new.find {|j| j.queue == 'feeds' && j.args[0] == feed.id && j.args[1] == true }
    if !Sidekiq::ScheduledSet.new.find {|j| j.queue == 'feeds' && j.args[0] == feed.id && j.args[1] == true }
      feed.sync
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但考虑到队列可以获得多大的数量,在迭代期间作业可能会在集合之间移动并被遗漏.

ruby ruby-on-rails sidekiq

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

使用UISearchController自定义UISearchBar

该文档UISearchController说明您可以覆盖- searchBar以提供UISearchBar控制器使用的自定义子类.确实使用了自定义搜索栏,并且正确调用了自己的委托方法,但UISearchResultsUpdating在搜索栏更改时不再调用该方法.我是否需要手动进行大量的布线操作,或者是否有一些我缺少的东西让控制器的行为与本机提供的搜索栏一样?

uisearchbar ios ios8 uisearchcontroller

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

在xcconfig中将二进制文件与静态库链接

我有一个Xcode项目,它本质上是一个内置于几个几乎相同的目标的应用程序.我已经在中心位置移动了几乎所有的构建配置设置,但我无法弄清楚如何将静态库(libMantle.a)的链接移动到xcconfig.我已经尝试了-framework-l标志,就像我用于其他各种库,但它们不起作用.有没有办法从链接二进制文件库中获取.a文件,所以我不需要手动保持所有目标同步?

xcode clang ios xcode5

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

缺少资产目录编译器选项

我刚刚将项目切换为使用资产目录来显示图标和启动图像.但是,看起来有些东西已经被淹没了,因为资产没有内置到应用程序中.我不能确定,但​​我怀疑这个问题与我的项目/目标构建设置中缺少资产目录编译器 - 选项面板这一事实有关.在新应用或我已切换的其他应用中,一旦目标使用资产目录,该面板就会出现.对于这个项目,当我启用目录(在常规选项卡),我得ASSETCATALOG_COMPILER_APPICON_NAMEASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME,但他们都列在用户定义的设置,并应出现在资产目录编译器的其他设置丢失.

任何人有任何想法如何强制Xcode找到这些设置?

iphone xcode ios xcode5

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

iOS状态恢复丢弃导航堆栈

tl; dr状态恢复过程似乎正在发生,但堆栈(非根)视图控制器在恢复完成后不会在应用程序中结束.

我正在尝试在应用程序中实现状态恢复,该应用程序不使用任何.nib或故事板.这是一个相当基本的结构:窗口rootViewControllerUINavigationController自己的rootViewController和所有其他子视图控制器UITableViewControllers(例如,Window> Nav Ctrl> Table View Ctrl> Table View Ctrl>等).没有任何视图控制器被重复(即堆栈中的每个项目都是不同的UITableViewController子类)

如我正在与故事板创建任何视图控制器,I为每个视图控制器类设置指定初始化restorationIdentifierrestorationClass.

当应用程序正在恢复时,我看到当应用程序进入后台时存在的每个视图控制器发生解码(例如,导航控制器,播客列表控制器和播客详细控制器),但最终结果是恢复始终是导航控制器,显示正常的根视图控制器(播客列表控制器).

这个问题似乎很相似了这个问题,但我肯定调用superencode-和decodeRestorableStateWithCoder:我的视图控制器方法(如果存在的话),这样的解决方案并不能帮助我.

我观看了WWDC视频并经历了许多教程,虽然我似乎达到了所有要求,但事情并没有按照应有的方式发挥作用.

我能想到的唯一事情是恢复正在发生,但我的默认初始化代码正在用一个仅包含根的"新鲜"替换恢复的导航视图控制器堆栈.根据WWDC视频,窗口和根视图控制器应该在状态恢复之前正常设置,并且不应该影响恢复的最终应用程序状态.

我想我的一个问号是我的viewControllerWithRestorationIdentifierPath:方法应该发生什么UINavigationController.应该rootViewController像我一样设置吗?如果没有,还会发生什么?我实际上找不到任何正在恢复导航控制器的工作示例代码,而且它不是从笔尖或故事板创建的.除此之外,我很难过.

实施代码

FLAppDelegate.m

# pragma mark - UIApplicationDelegate
# pragma mark Monitoring App State Changes

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  // Window and root VC set up in window getter
  [self.window makeKeyAndVisible];

  return …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uinavigationcontroller ios state-restoration ios7

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

用Mongoid人性化属性?

我需要在使用MongoDB的应用程序中人性化一些属性Mongoid.似乎旧的做事方式就像

def self.human_attribute_name(attr, options = {})
  HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
Run Code Online (Sandbox Code Playgroud)

但这已经被i18n方法所取代.在他们自己的文件中覆盖似乎是一种更清洁的方法.尽管如此,我可以说,这是一个产品ActiveRecord.使用时有没有办法实现同样的目的Mongoid

ruby ruby-on-rails mongoid

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