好的我看了看,我想我错过了一些关于自定义键盘和插入文本的东西UITextField.像许多人一样,我正在UIView使用我自己的自定义键帽创建自定义键盘UIButtons.然后我将此视图分配给UITextField inputView,然后当该文本字段成为第一个响应者时,我的键盘会弹出.在键盘内部我捕获按钮动作并将它们转换为按键操作.
但是从这里开始,我很困惑如何最好地将我的击键发送到文本字段.我见过很多例子,如iOS自定义键盘更新父视图中的文本字段和返回输入到UITextfield自定义输入视图以及如何将键值从自定义键盘推入UITextView在iOS中,解决方案似乎是嵌入指向目标的指针UITextField在自定义视图中.
这对我来说似乎不对,对于多个UITextFields我必须在新文本字段成为第一个响应者时手动更改单个自定义键盘上的引用,或者我必须为每个文本字段携带匹配的自定义键盘我想要支持.
在我看来,键盘应该只是将触摸转换为标记并将这些标记发送到线上,以便由接收它们的人解释(第一响应者?). iPad For iPhone开发人员101自定义输入视图教程似乎这样做,但创建了一个自定义协议来执行此操作.我想(实际上是一个SWAG - Scientific Wild Arsed Guess)标准的iOS键盘就是这样运行的,但是使用特定的协议来传递击键.所以我想要做的是手动生成标准键盘所做的相同事件/消息链.
那我该怎么做呢?或者我甚至可以使用公共API执行此操作?或者标准键盘的操作是否与UITextField绑定得太紧了?
我正在使用T4模板(除其他外)在AssemblyInfo.cs文件中增加构建号.
因为我只希望在运行Release版本时进行转换,所以我之前通过将T4文件上的构建操作设置为"None"并在项目上具有预构建命令的kludge来完成此操作:
if $(Configuration) == Release "%CommonProgramFiles(x86)%\microsoft shared\TextTemplating\12.0\TextTransform.exe" -a !!build!true "$(ProjectDir)Transforms\AssemblyInfo.tt"
Run Code Online (Sandbox Code Playgroud)
我现在正在转向VS2017,我想知道是否有更好的方法来做到这一点.像Get Visual Studio这样的问题的答案在每个构建上运行T4模板基本上提供:
在2017年,VS2017有更好的方法来实现我的目标吗?有些东西允许我只在发布版本上运行我的T4,它从IDE集成到解决方案中而不依赖于批处理文件?
另一个问题在运行T4模板时确定解决方案配置(调试/发布)显示了如何从T4模板中获取构建类型,但到那时对我来说已经太晚了.
本周我一直试图加快命名管道的速度.我试图用它们解决的任务是,我有一个现有的Windows服务,它充当设备驱动程序,将数据从外部设备汇集到数据库中.现在我必须修改这个服务并添加一个可选的用户前端(在同一台机器上,使用一种IPC形式),它可以在设备和数据库之间传递数据时监控数据,并将一些命令发送回服务.
我对IPC的初步想法是命名管道或内存映射文件.到目前为止,我一直在使用WCF教程基本进程间通信来完成命名管道的想法.我的想法是使用一个实现WCF NamedPipe服务的附加线程来设置Windows服务,并将其用作我的驱动程序内部的管道.
我有示例代码工作,但是我无法理解2个问题,我希望有人可以帮助我:
在本教程中,ServiceHost使用typeof(StringReverser)进行实例化,而不是通过引用具体类来实例化.因此,似乎没有服务器与服务本身交互的机制(在host.Open()和host.Close()行之间).是否可以在服务器和实际实现服务的类之间创建链接并传递信息?如果是这样,怎么样?
如果我运行服务器的单个实例然后运行多个客户端实例,则似乎每个客户端都获得服务类的单独实例.我尝试将一些状态信息添加到实现该服务的类中,并且它仅保留在命名管道的实例中.这可能与第一个问题有关,但是无论如何强制命名管道使用实现服务的类的相同实例?
最后,有关MMF与命名管道的任何想法吗?
编辑 - 关于解决方案
根据Tomasr的回答,解决方案在于使用正确的构造函数来提供实现服务的具体单例类(ServiceHost Constructor(Object,Uri [])).我当时没有意识到的是他提到确保服务类是线程安全的.天真地只是更改构造函数导致服务器崩溃,这最终导致我从这个博客条目Instancecontextmode和Concurrencymode了解InstanceContextMode .设置正确的上下文很好地完成了解决方案.
在关键帧动画的另一个测试中,我正在组合theImage沿着贝塞尔曲线路径移动UIImageView(被调用)并在移动时缩放它,导致路径末端的图像大2倍.我这样做的初始代码中包含以下元素来启动动画:
UIImageView* theImage = ....
float scaleFactor = 2.0;
....
theImage.center = destination;
theImage.transform = CGAffineTransformMakeScale(1.0,1.0);
CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
[resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(theImage.image.size.height*scaleFactor, theImage.image.size.width*scaleFactor)]];
resizeAnimation.fillMode = kCAFillModeBackwards;
resizeAnimation.removedOnCompletion = NO;
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.path = [jdPath path].CGPath;
pathAnimation.fillMode = kCAFillModeBackwards;
pathAnimation.removedOnCompletion = NO;
CAAnimationGroup* group = [CAAnimationGroup animation];
group.animations = [NSArray arrayWithObjects:pathAnimation, resizeAnimation, nil];
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
group.removedOnCompletion = NO;
group.duration = duration;
group.delegate = self;
[theImage.layer addAnimation:group forKey:@"animateImage"];
Run Code Online (Sandbox Code Playgroud)
然后,当动画完成时我想保留更大尺寸的图像,所以我实现:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag …Run Code Online (Sandbox Code Playgroud) 我刚刚完成了Apple的一个示例应用程序的完全重写[1],我将在GitHub上根据BSD许可证发布我的代码作为源代码.
将BSD许可证文本添加到.h和.m文件很简单,我可以将版权信息添加到我将包含的.png资产中,但我很难过如何将必要的许可证信息添加到xib文件.XCode在编辑后重新生成文件,因此手动添加到xml注释的任何内容都将被删除.
我想将这个许可证添加到nib文件中以保证完整性,但我并没有挂断它 - 所以有人可以提供任何建议吗?
[1]该应用程序是AccelerometerGraph,重写包括在单独的图表上显示每个加速度计通道,提供额外的信号输入(正弦,步进和脉冲)以及额外的滤波器(巴特沃斯一阶和二阶低高和带通).
我是第一次尝试WPF而且我正在努力解决如何将控件绑定到使用其他对象组合构建的类.例如,如果我有由两个单独的类构成的类Comp(请注意为清晰起见省略了各种元素):
class One {
int _first;
int _second;
}
class Two {
string _third;
string _fourth;
}
class Comp {
int _int1;
One _part1;
Two _part2;
}
Run Code Online (Sandbox Code Playgroud)
现在我明白我可以使用Comp中定义的"get"轻松绑定_int1.但是我如何绑定元素_part1._first,_part1._second.我是否在Comp级别为他们暴露了"getters"?或者我可以在复合类中公开它们并使用指向它们的绑定路径?这如何设置属性?
这是模式吗?
....
<TextBlock Name="txtBlock" Text="{Binding Path=Third}" />
....
class One {
int _first;
int _second;
}
class Two {
string _third;
string _fourth;
}
class Comp {
int _int1;
One _part1;
Two _part2;
int Int1 { get { return _int1; } set { _int1 = value; } }
int First { get …Run Code Online (Sandbox Code Playgroud) 我即将实现原型FileSystemWatcher解决方案.我有一个目录来监控文件创建,以及吸收创建的文件并将其插入数据库的任务.大致这将涉及读取和处理6或7,80个字符文本文件,每隔几秒发生一次150毫秒的爆发,并且很少还需要处理2MB二进制文件.这很可能是一个24/7的过程.
从我读到的有关FileSystemWatcher对象的内容来看,最好将其事件排入一个线程,然后在另一个线程中将它们出列/处理.我现在遇到的困境是进行处理的线程的更好的创建机制.我能看到的选择是:
每次我收到FSW事件时,我都会手动创建一个新线程(是的,我知道......愚蠢的架构,但我必须说出来).
每当我收到FSW事件时,都会在CLR线程池中抛出处理
在启动时,为处理创建专用的第二个线程,并使用生产者/消费者模型来处理工作.主线程将请求排队,第二个线程将其排队并执行工作.
我倾向于将第三种方法作为首选方法,因为我知道工作线程将始终是必需的 - 而且可能更多因为我对线程池没有感觉.
我有一个现有的(基于 C# 的)windows 服务,它派生自Installer 类,我目前使用 MS 提供的命令行InstallUtil来安装和卸载它。这工作正常,作为我系统的一部分,我已将事件处理程序附加到 AfterUninstallEventHandler 和 CommittedEventHandler 事件。就我而言,我只是使用它们将消息记录到自定义事件日志中 - 显示安装和卸载日期和时间以及程序版本。
目前我正在试验Wix v3.5 Beta 1来打包我的一堆东西,包括这个服务,我正在使用 Wix ServiceInstall 和 ServiceControl 来替换我手动使用 InstallUtil 做的事情。
然而,Wix 似乎使用与 InstallUtil 完全不同的机制来安装服务。这可以从 Wix 控制的服务的名称和描述中看出(与嵌入在服务程序中的服务相反)并且我的事件不再触发(如果使用不同的安装机制,我怀疑它们会)。
那么 Wix 是否有可能以与 InstallUtil 相同的方式执行服务安装,或者我只是要忍受这些差异?
编辑
Christopher 建议从我的代码中分离出与服务相关的定义,并将它们移动到 Wix 安装程序项目中。这让我感到不安,因为现在我要么必须找到一种方法在两个独立的系统之间共享信息(我不知道如何在代码和 Wix 项目之间共享),要么忍受在两个不同的位置定义信息(非常糟糕)软件实践)。
我正在试验一个程序,该程序可以高速将数据插入 SQL 2005 Server 数据库(在 XP SP3 上)。(这是为了收集时序数据,以便我可以评估设计的不同方面)。
我的基本设置包括将数据插入到如下表中(并使用仅指定有效负载字段的 SP):
create table data
(
Id int PRIMARY KEY Identity,
payload datatime not null,
inserted datetime default (getdate()) not null
)
Run Code Online (Sandbox Code Playgroud)
请注意,这两个日期时间字段也有 UNIQUE 约束。
在客户端程序上,我在如此紧密的循环中调用 SP,以至于我遇到了 .Net DateTime.Now 值的精度问题(也可能是线程休眠),因此违反了有效负载的唯一约束。我通过结合秒表变量、一些 Thread.Sleep() 和手动构建“有效负载”数据来解决这个问题,这样它就不会违反 SQL DateTime 字段的分辨率(3.3 mS)
然而,随着插入的生成速度在 5 毫秒到 10 毫秒之间,我开始看到 SQL 端“插入”字段的问题,其中一行会因唯一键违规而定期被拒绝。只有当我将插入速率降低到 15 毫秒左右时,这个问题才会消失。这个速率可疑地类似于我在 .Net DateTime.Now 中遇到的精度问题(我在某处的帖子上读到 16mS),所以我想知道 SQL Getdate() 函数的实际精度是多少。
那么有人可以告诉我什么支持 GetDate(),它是否与 .Net DateTime.Now 值绑定到相同的源?我应该期望它达到什么样的精度?
顺便说一句,我了解 SQL 2008 服务器中的 DATETIME2 类型,因此这就提出了一个问题:该系统中 GetDate() 的精度是多少。
这与WPF Binding类似的问题:在绑定路径中进行转换,我需要在XAML绑定语句中强制转换对象.但我似乎无法理解如何在我的特定情况下制作绑定.
该问题的答案引用了PropertyPath XAML语法,相关部分是(我相信)Single Property, Attached or Otherwise Type-Qualified.
就我而言,在我的主视图模型中,我有一个字典,它将字符串映射到实现基接口的对象:
Dictionary<string, IFlintStone> FlintStones { get; set;}
public interface IFlintStone { Walk, Talk etc}
public class FlintStone : IFlintStone { .. }
Run Code Online (Sandbox Code Playgroud)
但是我还有这些额外的对象和接口,它们是基类对象的子类:
public interface IFred : IFlintStone { Eat, Drink, Yell etc }
public interface IWilma : IFlintStone { Wash, Clean, Cook etc }
public class Fred : FlintStone, IFred {..}
public class Wilma : FlintStone, IWilma {..}
Run Code Online (Sandbox Code Playgroud)
最后我填写了我的字典:
FlintStones["Fred"] = new …Run Code Online (Sandbox Code Playgroud) ios ×3
c# ×2
wpf ×2
binding ×1
casting ×1
composite ×1
data-binding ×1
flicker ×1
getdate ×1
installation ×1
keyboard ×1
named-pipes ×1
nib ×1
object ×1
precision ×1
scaling ×1
t4 ×1
threadpool ×1
uiimageview ×1
uitextfield ×1
wcf ×1
wix ×1
wix3.5 ×1
xaml ×1
xcode ×1
xib ×1