我想在a UITextView
和a中设置允许输入的最大字符数UITextField
.这个数字将以小标签显示(供用户参考,Twitter风格).
我有一个UIButton,我想更新它的标题,但我不必总是为每个状态执行此操作,如下所示:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Play" forState:UIControlStateHighlighted];
[myButton setTitle:@"Play" forState:UIControlStateSelected];
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
说我有一个NSMutableAttributedString
.
该字符串具有各种格式的格式:
这是一个例子:
这个字符串在iOS中很难改变 ,真的很糟糕.
但是,字体本身不是您想要的字体.
我想要
将每个字符更改为特定字体(例如,Avenir)
但,
在各个地方保留整个字符串中出现的其他每个属性(粗体,斜体,颜色等).
你到底怎么这样做?
注意:
如果您在整个范围内轻松添加属性"Avenir":它只是删除所有其他属性范围,您将丢失所有格式
需要明确的是:不幸的是,属性并非实际上是"附加的".
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魔法 - 只需向您的守护程序添加一个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) 在开始注意之前,这与后台处理无关.没有"计算"涉及到背景.
只有UIKit.
view.addItemsA()
view.addItemsB()
view.addItemsC()
Run Code Online (Sandbox Code Playgroud)
让我们说6s的iPhone
这将发生:
但是,让我说我希望这种情况发生:
(注意"一秒钟"只是一个简单的例子.为了更全面的例子,请参阅本文末尾.)
你是如何在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或更糟 …
我需要使用MonoTouch获得iPhone/iPad的宽度和高度.
如何以编程方式获得?
iPad/iOS具有视频流支持,例如H.264使用MPMoviePlayerController
等,但我通过自定义的专有流接收H.264数据,需要在软实时场景中对其进行解码.
可以通过任何方式访问iPad/iOS的视频解码器来解码这些数据吗?
更新:显然iOS 4.0核心媒体框架支持解码帧并知道H.264,但是没有示例代码也无法看到我实际应该为实际解码调用的内容.
更新(十年后!)
对于谷歌搜索这里的任何人,你现在用iOS"VideoToolbox"在iOS中这样做.
使用mach_absolute_time和下面的金鹰解释的简单NSDate方法有什么区别?
这是使用马赫方法的一个很好的解释......
和
该对象继承自NSObject.
有没有一种方法可以将它的副本创建为新对象?
对于具有通常的四个点a,b,c和d的三次Bézier曲线,
对于给定值t,
如何最优雅地找到那一点的切线?
iphone ×5
ios ×4
swift ×4
ipad ×3
c# ×2
bezier ×1
interface ×1
objective-c ×1
performance ×1
resolution ×1
runloop ×1
uitextfield ×1
uitextview ×1
xamarin.ios ×1
xcode ×1