我遇到了一个奇怪的效果,肯定看起来像iOS7中的一个错误 - 但是在过去,当我以为我发现Apple的API中有一个错误时,它已经证明是我自己的误解.
我有一个带有datePickerMode = UIDatePickerModeCountDownTimer和minuteInterval = 5的UIDatePicker.我将持续时间初始化为1小时,并将其呈现给用户,它显示为具有小时和分钟的双列选择器.(到现在为止还挺好.)
用户正在考虑"20分钟",因此将小时列滚动到0.此时选择器读取0小时0分钟,而iOS7并不酷,因此它会自动将分钟轮滚动到5.我的UIControlEventValueChanged处理程序被调用,countDownDuration读取5分钟.(还好.)
现在,用户抓住分钟轮并将其拖动到20.并且...我的UIControlEventValueChanged处理程序不会被调用.(坏.)
如果我在UI中有其他事件检查此时的日期选择器,我确实看到countDownDuration设置为20.但我无法知道用户在更改时已经更改了它.这是非常可重复的:它始终发生在拾取器拒绝设置为0之后的第一次更改(将自身推进到5分钟).
请注意,这是在iOS7中; 它不会出现在iOS6中(也许是因为选择器有完美的内容设置为0分钟).
所以......我在这里错过了一些东西吗?或者这是iOS7中的真正错误?而在后一种情况下,是否有人知道解决方案比定时检查当前间隔更好?
我正在尝试使用Xamarin(在Mac OS X上)在Mono中进行一些跨平台(Mac,iOS,Android)开发.我在"Filament"命名空间内创建了一个"Point"类,现在我正在尝试添加单元测试.
在Mono世界中,似乎有两种单元测试方法:NUnit和NUnitLite.我已经尝试了两种方法(在后一种情况下,遵循本教程),结果相同,这是:
在我的单元测试项目中,我添加了一个指向Point.cs文件的链接(通过右键单击项目,使用"添加...",选择文件,然后选择"添加为链接"选项).在我的单元测试文件(PointTest.cs)中,我添加"using Filament;" 到文件的顶部.但是尽管我现在可以使用Point类,并且它成功编译,但Intellisense似乎完全没有注意到它 - 每次我开始键入"Point"时它会将其扩展为"PointTest",当我顽固地改变它时对于Point,它将它绘制为红色,就像错误一样.
事实上,我的"使用"线也发生了同样的麻烦; 我键入"使用Filament",它将其更改为"使用FilamentTestsiOS"(我的单元测试项目的命名空间).
这让我疯狂......但作为Mono,Xamarin,NUnit和NUnitLite的完整菜鸟,我确信我做的事情很愚蠢.
设置C#/ Mono单元测试的正确方法是什么,以便intellisense和编译器都能识别我正在编写测试的类?
这个让我把头发拉出来.我只是想用UITableViewCellStyleSubtitle样式创建一个带有文本和细节的表.但细节并未出现.通常这是因为有人忘记用正确的样式初始化单元格,但这不是在这种情况下发生的事情.我已经尝试了所有四种单元格样式,并且细节没有出现在任何单元格中,尽管当我使用UITableViewCellStyleValue2时文本标签确实向右移动.
我以前多次成功创建了表格.在这种情况下,我能想到的唯一重要区别是我没有使用UITableViewController.相反,我像任何其他视图一样嵌入UITableView,并连接我自己的数据源和委托.
我已经把关键方法归结为:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get the UITableViewCell (out of the recycling pool, or de novo)
NSString *reuseID = @"CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (not cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseID] autorelease];
}
cell.textLabel.text = @"Foo";
cell.detailTextLabel.text = @"Bar";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.detailTextLabel.frame = CGRectMake(10, 20, 200,22); // required
cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:12]; // also required
//[cell setNeedsLayout]; (makes no difference)
return cell;
}
Run Code Online (Sandbox Code Playgroud)
只有当我包含上面"必需"行的两个(并使用除Default之外的任何单元格样式)时,我才能看到详细文本,即使我这样做,文本标签的位置也完全重叠细节标签的位置.
因此,似乎初始化程序正在创建detailTextLabel UILabel,但将其字体大小设置为零,并将其框架设置为空或屏幕外的内容.(我已经尝试在调试器中检查这些,但它不是很有用 - 字体大小为零,框架为空,表示textLabel和detailTextLabel,但textLabel总是显示正常.)
显然,如果必须,我可以通过手动调整标签大小和字体来解决它.但是,在这种情况下,我必须这样做,这通常只是设置样式,文本和布局是自动的,这让我非常不安.我搜索了谷歌和堆栈溢出,但找不到任何类似问题的引用.有没有人知道这里发生了什么? …
在C++中,我习惯使用sentry模式来确保在块或函数退出时正确释放所获取的资源(例如,参见此处).例如,我使用它来获取图形状态,然后我可以做任何我想要的状态,当sentry对象(引用)超出范围时它会被放回去.
现在我正在使用C#,同样的技巧不起作用,因为析构函数不会被调用,直到谁知道 - 以后.
是否有一些OTHER方法可以保证在释放对象的最后一个引用时触发?或者我只需要记住在从我将使用哨兵的任何方法返回之前调用一些Restore()或Apply()或DoYourThing()方法?
好的,从"我从没想过这将成为困难的部门"部门:如何在Xamarin Mac中设置NSTextField的文本?
NSTextView view = new NSTextView(new RectangleF(0, 500, 200, 40));
view.StringValue = "Foo";
Run Code Online (Sandbox Code Playgroud)
不编译(没有方法"StringValue").SetStringValue("Foo")也没有.似乎也没有任何SetText方法.有一个InsertText方法,但它没有采用C#字符串; 它想要一个NSObject(这让我觉得它并不是真正用于直接使用).
请注意,如果我使用NSTextField而不是NSTextView,我可以很好地分配给StringValue.但是使用NSTextField,相同的代码失败了.
我在iOS上的ObjC编程方面很有经验,但对Mac Cocoa和Xamarin Mac来说几乎都是一个菜鸟.所以我确定我错过了一些明显的答案,但我的谷歌搜索没有找到答案(而且Xamarin论坛今天已经失效).任何帮助将不胜感激.
我有一堆共面点在 3D 空间中定义了一个多边形。这些总是以相同的方式缠绕(例如顺时针)。我需要确定包含该多边形的平面的有符号法线,即,知道该多边形的“向上”方向。
起初这似乎很容易:取两条边(顶点差)并计算叉积。但是如果边缘恰好是共线的(你得到一个零幅度的叉积),那就失败了。
然后我尝试遍历顶点列表,直到找到与第一条边成相当大角度的第二条边。这在凸多边形上可靠地工作,但如果我最终得到的两条边没有定义多边形内部的三角形,它可能会在非凸多边形上失败(指向相反的方向)。
我知道如果我先对多边形进行三角剖分,那么我可以轻松可靠地检查任何三角形的面……但问题是我的三角剖分库需要知道平面法线。所以,鸡蛋必须先于鸡。
如何在非凸多边形中选取两条边(或三个顶点)来可靠地定义多边形面向的方向?
我现在正在尝试使用此处描述的客户端 REST 集成来加快使用 PayPal Express Checkout(即 checkout.js)的速度。我看到当支付完成时,我的 onAuthorize 函数被一个“支付”对象调用。
我找不到有关此对象的任何文档,但对其进行了一些探索,揭示了以下属性(至少在今天):
现在我需要将用户重定向到我网站上的下一步,在那里我显示确认他们已付款等的收据。我想我将上述数据发送到服务器,但由于该步骤很容易被恶意软件欺骗用户,我需要在服务器端的 PHP 代码中验证这些详细信息。
我怎么做?
如何RectangleF在 C# 中轻松克隆(复制)a?
显然有一些不优雅的方法可以做到这一点,例如new RectangleF(r.Location, r.size),但是肯定有一个.Copyor.Clone方法隐藏在某处吗?但这些都不适合我编译,也似乎没有复制构造函数。我怀疑有一些简单的 C# 标准方法可以复制任何结构,但我还没有找到。
如果重要的话,我的真正目标是创建一个返回矩形偏移版本的方法(因为,令人惊讶的是,RectangleF没有这样的内置 - 它只有一个变异器方法)。我对此最好的尝试是:
public static RectangleF Offset(RectangleF r, PointF offset) {
PointF oldLoc = r.Location;
return new RectangleF(new PointF(oldLoc.X+offset.X, oldLoc.Y+offset.Y), r.Size);
}
Run Code Online (Sandbox Code Playgroud)
(令人震惊的是缺少加法运算符,这使得它变得更加丑陋PointF,但这是另一个问题。)有没有更简单的方法来做到这一点?
我正在制作一个跨平台的C#绘图库供我自己使用,模仿System.Drawing并使用尽可能多的标准System.Drawing类型(如PointF,RectangleF,Color和Pen).
不幸的是,iOS上没有提供Pen类.因此,在编译iOS时,我在System.Drawing中添加了这个,并且设计为与标准System.Drawing.Pen类尽可能兼容.到现在为止还挺好.
今天我添加了对线帽和连接样式的支持.在标准框架中(但不在iOS上),这些在System.Drawing.Drawing2D命名空间中定义.所以,我再次在仅在iOS上编译的代码中添加它们:
namespace System {
namespace Drawing {
namespace Drawing2D {
public enum LineCap {
Flat,
Round,
Square // (etc.)
}
}
public class Pen {
public Color Color;
public float Width;
public Drawing2D.LineCap StartCap;
public Drawing2D.LineCap EndCap;
// (etc.)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们得到了奇怪的一点.在我的主程序中,我试图使用所有这些,我有"使用System.Drawing;" 在文件的顶部.我发现,即使在iOS上,我现在也可以直接使用Pen:
Pen p = new Pen(Color.Yellow, 6);
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试直接使用Drawing2D.LineCap,我会收到一个CS0103错误,"当前上下文中不存在名称'Drawing2D'."
p.StartCap = Drawing2D.LineCap.Round; // <-- ERROR
Run Code Online (Sandbox Code Playgroud)
为了使它工作,我必须完全限定名称,如下所示:
p.StartCap = System.Drawing.Drawing2D.LineCap.Round; // <-- OK (but sad)
Run Code Online (Sandbox Code Playgroud)
所以,我想明白为什么会这样.我知道当有两个版本的东西时,可能需要一个完全限定的名称,因此编译器无法解决你的意思.但在这种情况下我无法看到碰撞.据我所知,MonoTouch根本没有System.Drawing2D名称空间; 我给了它一个,那么问题是什么?
c# ×3
ios ×3
xamarin ×2
algorithm ×1
c++ ×1
clone ×1
copy ×1
geometry ×1
intellisense ×1
macos ×1
namespaces ×1
nstextview ×1
paypal ×1
php ×1
polygon ×1
uidatepicker ×1
uitableview ×1
using ×1
xamarin.ios ×1