小编dou*_*e07的帖子

如何围绕按钮的角落

我有一个矩形图像(jpg),并希望用它来填充xcode中带圆角的按钮的背景.

我写了以下内容:

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
CGRect frame = CGRectMake(x, y, cardWidth, cardHeight);
button.frame = frame;
[button setBackgroundImage:backImage forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

但是,我用这种方法得到的按钮没有圆角:它是一个看起来与原始图像完全相同的普通矩形.我怎样才能获得带圆角的图像来代表我的按钮?

谢谢!

cocoa-touch rounded-corners uibutton ios

177
推荐指数
6
解决办法
19万
查看次数

何时(不)滥用NSUserDefaults

我想知道指南的用途:
1 - 我多久可以从NSUserDefaults中读取
2 - 我可以在NSUserDefaults中合理存储多少数据

显然,NSUserDefaults可以使用多少是有限的,但我无法确定什么是合理的,什么不是.

其中一些例子:

  • 如果我的游戏有一个选项让计算机成为其中一个玩家,我将使用NSUserDefaults来保存该布尔值.这很清楚.但是,每当我想知道计算机是否是一个播放器或我是否应该使用实例变量时,在我的游戏中访问NSUserDefaults也是合理的吗?假设我需要每秒检查一次布尔值.答案是否相同是100毫秒而不是?每10秒钟一次呢?

  • 如果我的游戏有50个移动物体,并且我希望在用户退出应用程序时存储它们的位置和速度,那么NSUserDefaults是一个存储该数据的合理位置吗?20个移动物体怎么样?200怎么样?

cocoa options limit nsuserdefaults

23
推荐指数
4
解决办法
5550
查看次数

如何从Collection中返回N个连续元素?

我传递了一个对象集合(在我的情况下是一些Contact类),需要从该集合返回一个页面.我的代码感觉比它需要的时间长得多.我是否缺少一些可以执行更优雅的库,而不是像下面一样一次迭代每个元素?

protected Collection<Contact> getPageOfContacts(
  Collection<Contact> contacts, int pageIndex, int pageSize) {
  if (pageIndex < 0 || pageSize <= 0
    || pageSize > contacts.size()) {
    return contacts;
  }
  int firstElement = pageIndex * pageSize;
  int lastElement = (pageIndex + 1) * pageSize - 1;
  Collection<Contact> pagedContacts = new ArrayList<Contact>();
  int index = -1;
  for (Contact contact : contacts) {
    index++;
    if (index < firstElement) {
      continue;
    }
    if (index > lastElement) {
      break;
    }
    pagedContacts.add(contact);
  }
  return pagedContacts;
}
Run Code Online (Sandbox Code Playgroud)

java iteration collections paging guava

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

使用AudioUnit对数据包和帧大小使用什么值

我熟悉如何使用AudioUnit播放声音,并对数据包和帧的概念感到困惑.我想知道:

  • AudioUnit上下文中数据包和帧的定义是什么

  • 每个数据包使用多个样本以及每帧多个数据包的交易是什么

我的理由是:在我到目前为止看到的所有代码示例中,数据包本质上是一个样本,对于16位立体声流,通常mBytesPerPacket = 4.mFramesPerPacket通常为1,制作一个帧,一个数据包和一个样本(都是立体声样本),相同的概念.

我期望数据包和/或帧是样本的缓冲区,即一组256或512个连续样本,驱动程序可以指向并线性读取.将帧/数据包大小减少到一个样本似乎会给负责播放数据的任何驱动程序带来不必要的压力.我错过了什么?

audio cocoa frame packet audiounit

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

在cocoa中声明私有变量的最佳方法

我想知道在cocoa中声明私有实例变量的建议是什么.这个问题是在iPhone上开发应用程序的背景下.

我知道至少有三种声明私有变量的方法:

  1. 使用修饰符@private在h文件的接口中声明它们:

    @interface MyClass : NSObject {  
      @private  
      NSObject * myPrivateVar;   
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在m文件的实现部分声明它们:

    @implementation MyClass  
    NSObject * myPrivateVar;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在m文件的接口中声明一个属性(甚至不声明变量本身):

    @interface MyClass ()  
    @property (nonatomic, retain) NSString* myPrivateVar;  
    @end  
    @implementation  
    @synthesize myPrivateVar;
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,我已广泛使用2但最近才意识到由于缺乏垃圾收集,这可能是危险的.是否存在使用该方法完全可以接受的情况?

3更合适吗?答案是否取决于对象类型(例如,mutable/immutable)?

参考资料的指针一般也赞赏使用/不使用属性的权衡.

cocoa properties private instance-variables

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

难以逃脱的角色

我需要从字符串中删除一些无效字符,并编写StringUtil库的以下代码部分:

public static String removeBlockedCharacters(String data) {
    if (data==null) {
      return data;
    }
    return data.replaceAll("(?i)[<|>|\u003C|\u003E]", "");
}
Run Code Online (Sandbox Code Playgroud)

我有一个测试文件illegalCharacter.txt,里面有一行:

hello \u003c here < and > there
Run Code Online (Sandbox Code Playgroud)

我运行以下单元测试:

@Test
public void testBlockedCharactersRemoval() throws IOException{
    checkEquals(StringUtil.removeBlockedCharacters("a < b > c\u003e\u003E\u003c\u003C"), "a  b  c");
    log.info("Procesing from string directly: " + StringUtil.removeBlockedCharacters("hello \u003c here < and > there"));
    log.info("Procesing from file to string:  " + StringUtil.removeBlockedCharacters(FileUtils.readFileToString(new File("src/test/resources/illegalCharacters.txt"))));
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

INFO - 2010-09-14 13:37:36,111 - TestStringUtil.testBlockedCharactersRemoval(36) | Procesing from string directly: hello  here  and  there
INFO …
Run Code Online (Sandbox Code Playgroud)

java regex escaping character

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

调用重载的方法,其中所有参数都实现相同的接口

我的出发点如下:
- 我有一个方法,转换,我重载,根据传入的参数类型不同(参见transform(A a1,A a2)和transform(A a1,B b))在下面的例子中)
- 所有这些参数都实现了相同的接口X.

我想在所有实现X接口的各种对象上应用该转换方法.

我想到的是实现变换(X x1,X x2),它在应用变换的相关变量之前检查每个对象的实例.

虽然它有效但代码看起来很难看,我也担心评估这些各种instanceof和cast的性能开销.这是我用Java做的最好的转换,还是有更优雅和/或更有效的方法来实现相同的行为?

以下是印刷BA的一个简单的工作示例.我正在寻找有关如何改进该代码的示例.在我的真实代码中,我自然有更多的'transform'实现,而且没有一个像下面那样简单.

public class A implements X {
}

public class B implements X {
}

interface X {
}

public A transform(A a1, A a2) {
  System.out.print("A");
  return a2;
}

public A transform(A a1, B b) {
  System.out.print("B");
  return a1;
}

// Isn't there something better than the code below???
public X transform(X x1, X x2) {
  if ((x1 instanceof A) && (x2 instanceof A)) { …
Run Code Online (Sandbox Code Playgroud)

java reflection overloading multiple-dispatch visitor-pattern

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