小编Fat*_*tie的帖子

设置`UITextView`和`UITextField`的最大字符数

我想在a UITextView和a中设置允许输入的最大字符数UITextField.这个数字将以小标签显示(供用户参考,Twitter风格).

uitextfield uitextview ios swift

32
推荐指数
6
解决办法
3万
查看次数

有没有办法在UIButton上setTitle一次更新所有UIControlStates?

我有一个UIButton,我想更新它的标题,但我不必总是为每个状态执行此操作,如下所示:

[myButton setTitle:@"Play" forState:UIControlStateNormal];

[myButton setTitle:@"Play" forState:UIControlStateHighlighted];

[myButton setTitle:@"Play" forState:UIControlStateSelected];
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

iphone swift

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

NSAttributedString,改变字体整体但保留所有其他属性?

说我有一个NSMutableAttributedString.

该字符串具有各种格式的格式:

这是一个例子:

这个字符串在iOS中很难改变 ,真的很糟糕.

但是,字体本身不是您想要的字体.

我想要

将每个字符更改为特定字体(例如,Avenir)

但,

在各个地方保留整个字符串中出现的其他每个属性(粗体,斜体,颜色等).

你到底怎么这样做?


注意:

如果您在整个范围内轻松添加属性"Avenir":它只是删除所有其他属性范围,您将丢失所有格式

需要明确的是:不幸的是,属性并非实际上是"附加的".

nsattributedstring swift

30
推荐指数
3
解决办法
7844
查看次数

在Unity中,Unity如何神奇地称呼所有"接口"?

Unity有一个"界面":

IPointerDownHandler(doco)

你只需实现OnPointerDown ...

public class Whoa:MonoBehaviour,IPointerDownHandler
    {
    public void OnPointerDown (PointerEventData data)
        { Debug.Log("whoa!"); }
    }
Run Code Online (Sandbox Code Playgroud)

Unity将"神奇地"调用OnPointerDown任何此类MonoBehavior.

您不必注册,设置事件,也不需要做任何其他事情.

你在语法上做的就是在类中添加"IPointerDownHandler"和"public void OnPointerDown",你可以神奇地获取这些消息.

(如果你不是Unity开发者 - 如果你在游戏运行时突然在编辑器中添加一个,它甚至可以工作!)

他们到底怎么做,我该怎么做?

所以,我想这样做:

public interface IGetNews
 {
 void SomeNews(string s);
 }
Run Code Online (Sandbox Code Playgroud)

然后我可以添加SomeNews 到任何MonoBehavior.

替代解决方案是显而易见的,我想具体了解Unity如何实现"魔术"行为.

(顺便说一句:我觉得他们不应该称这些"界面",因为它基本上没什么就像一个界面 - 它恰恰相反!你可以说他们神奇地想要从一个以上的抽象类继承,我猜测.)


在旁边:

如果您之前没有使用过Unity,那么传统的方法 - 因为我们无法访问Unity魔法 - 只需向您的守护程序添加一个UnityEvent,它将发送有问题的消息:

public class BlahDaemon:MonoBehaviour
  {
  public UnityEvent onBlah;

    ...
    onBlah.Invoke();
Run Code Online (Sandbox Code Playgroud)

假设您有Aaa,Bbb,Ccc等课程,希望得到这些消息.只需连接Unity事件(通过在编辑器或代码中拖动),例如:

public class Aaa:MonoBehaviour
  {
  void Awake()
    {
    BlahDaemon b = Object.FindObjectOfType<BlahDaemon>();
    b.onBlah.AddListener(OnBlah); …
Run Code Online (Sandbox Code Playgroud)

c# interface unity-game-engine

29
推荐指数
3
解决办法
3065
查看次数

如何,简单地等待iOS中的任何布局?

在开始注意之前,这与后台处理无关.没有"计算"涉及到背景.

只有UIKit.

view.addItemsA()
view.addItemsB()
view.addItemsC()
Run Code Online (Sandbox Code Playgroud)

让我们说6s的iPhone

其中每一个都需要一秒时间才能构建UIKit.

这将发生:

一大步

他们一直都在出现.重复一遍,屏幕只会挂起3秒,而UIKit会做大量的工作.然后他们都出现了.

但是,让我说我希望这种情况发生:

在此输入图像描述

他们一直在进步.当UIKit构建一个屏幕时,屏幕会暂停1秒钟.它出现.它会在构建下一个时再次挂起.它出现.等等.

(注意"一秒钟"只是一个简单的例子.为了更全面的例子,请参阅本文末尾.)

你是如何在iOS中做到的?

您可以尝试以下方法.它似乎不起作用.

view.addItemsA()

view.setNeedsDisplay()
view.layoutIfNeeded()

view.addItemsB()
Run Code Online (Sandbox Code Playgroud)

你可以试试这个:

 view.addItemsA()
 view.setNeedsDisplay()
 view.layoutIfNeeded()_b()
 delay(0.1) { self._b() }
}

func _b() {
 view.addItemsB()
 view.setNeedsDisplay()
 view.layoutIfNeeded()
 delay(0.1) { self._c() }...
Run Code Online (Sandbox Code Playgroud)
  • 请注意,如果该值太小 - 这种方法很简单,显然也没有做任何事情.UIKit将继续努力.(它还会做什么?).如果价值太大,那就没有意义了.

  • 请注意,目前(iOS10),如果我没有弄错的话:如果你尝试使用零延迟的技巧,它最好不正常工作.(正如你可能期望的那样.)

跳转运行循环......

view.addItemsA()
view.setNeedsDisplay()
view.layoutIfNeeded()

RunLoop.current.run(mode: .defaultRunLoopMode, before: Date())

view.addItemsB()
view.setNeedsDisplay()
view.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)

合理. 但是我们最近的实际测试显示,在许多情况下这似乎不起作用.

(也就是说,Apple的UIKit现在足够精致,可以将UIKit的工作涂抹在那个"技巧"之外.)

思考:在UIKit中,或许有一种方法可以获得一个回调,基本上,它已经绘制了你所堆积的所有视图了吗?还有其他解决方案吗?

一个解决方案似乎是......将子视图放在控制器中,因此您可以获得"didAppear"回调,并跟踪这些回调. 这似乎是婴儿,但也许这是唯一的模式?无论如何它真的会起作用吗?(仅仅是一个问题:我没有看到任何保证,确保确保所有子视图都已被绘制.)


如果这还不清楚......

日常用例示例:

•假设可能有七个部分.

•假设每个人通常需要0.01到0.20来构建UIKit(取决于您显示的信息).

•如果你只是"让一切都搞砸了"它通常会好或可以接受(总时间,比如0.05到0.15)......但......

•当"新屏幕出现"时,用户经常会有一个单调乏味的停顿.(.1到.5或更糟 …

performance runloop ios

29
推荐指数
2
解决办法
3780
查看次数

如何使用MonoTouch获得iPhone/iPad的宽度和高度?

我需要使用MonoTouch获得iPhone/iPad的宽度和高度.

如何以编程方式获得?

c# iphone resolution xamarin.ios ipad

24
推荐指数
2
解决办法
2万
查看次数

访问iOS的视频解码器?

iPad/iOS具有视频流支持,例如H.264使用MPMoviePlayerController等,但我通过自定义的专有流接收H.264数据,需要在软实时场景中对其进行解码.
可以通过任何方式访问iPad/iOS的视频解码器来解码这些数据吗?

更新:显然iOS 4.0核心媒体框架支持解码帧并知道H.264,但是没有示例代码也无法看到我实际应该为实际解码调用的内容.


更新(十年后!)

对于谷歌搜索这里的任何人,你现在用iOS"VideoToolbox"在iOS中这样做.


iphone video-streaming ipad

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

用于衡量iPad或手机代码内的完整执行时间的代码?

使用mach_absolute_time和下面的金鹰解释的简单NSDate方法有什么区别?

这是使用马赫方法的一个很好的解释......

如何准确计算在iPhone上调用功能所需的时间?

测量库调用和回调之间的时间

iphone xcode ipad ios

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

如何在Objective C中复制UIButton?

该对象继承自NSObject.

有没有一种方法可以将它的副本创建为新对象?

iphone objective-c

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

找到三次贝塞尔曲线上的点的切线

对于具有通常的四个点a,b,c和d的三次Bézier曲线,

对于给定值t,

如何最优雅地找到那一点的切线

bezier ios swift

22
推荐指数
3
解决办法
2万
查看次数