给定一个矩形区域,我想使用特定字体渲染一些文本,并使渲染文本填充矩形.如下图所示:

我提出了以下似乎适用于我的目的.代码绘制一行文本缩放以填充边界.子类UIView和替换drawRect如下.
- (void)drawRect:(CGRect)rect
{
[self drawScaledString:@"Abcde"];
}
- (void)drawScaledString:(NSString *)string
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
NSAttributedString *attrString = [self generateAttributedString:string];
CFAttributedStringSetAttribute((CFMutableAttributedStringRef)attrString, CFRangeMake(0, string.length),
kCTForegroundColorAttributeName, [UIColor redColor].CGColor);
CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef) attrString);
// CTLineGetTypographicBounds doesn't give correct values,
// using GetImageBounds instead
CGRect imageBounds = CTLineGetImageBounds(line, context);
CGFloat width = imageBounds.size.width;
CGFloat height = imageBounds.size.height;
CGFloat padding = 0;
width += padding;
height += padding;
float sx = …Run Code Online (Sandbox Code Playgroud) 多年来,我一直在为我的项目使用敏捷方法(XP和Scrum),效果很好.但在所有情况下,开发团队的所有成员都100%致力于该项目.
现在,当团队不稳定时,我面临这样做.例如,一次迭代可能有四个人工作,下一个可能只有两个或三个.
我意识到这使得使用正常速度方法很难(或不可能)估计,因为它会波动很大而不稳定.接下来的是,人们真的不希望能够在每次迭代结束时发布.
也许这里需要另一种方法.只需从积压的东西中抓取东西,然后尽可能地混淆和释放.我真的不喜欢那样......
有什么想法吗?
当我写东西时,一半的努力倾向于添加清晰简洁的调试输出,或者当需要调试时可以启用/禁用的功能.
调试功能的一个例子是下载器类,在这里我可以打开一个#define,让它"假装"下载文件,然后简单地把我送回去.这样我就可以测试用户下载文件时会发生什么,而不必等待网络每次都物理地抓取文件.这是很棒的功能,但#ifdefs的代码变得更加混乱.
我最终得到了一堆#define像
// #define DEBUG_FOOMODULE_FOO
// #define DEBUG_BARMODULE_THINGAMAJIG
// ...
Run Code Online (Sandbox Code Playgroud)
对于我想看的东西没有注释.代码本身就像是
- (void)something
{
#ifdef DEBUG_FOOMODULE_FOO
DebugLog(@"something [x = %@]", x);
#endif
// ...
#ifdef DEBUG_FOOMODULE_MOO
// etc
}
Run Code Online (Sandbox Code Playgroud)
这对于编写/维护代码非常有用,但它对代码的外观没有任何作用.
人们如何编写毫不费力的即时长期调试"东西"呢?
注意:我不仅在这里谈论NSLogging ......我也在讨论像上面假装下载这样的东西.
我需要使用我的应用程序分发包含html文件和图像的目录.
该应用程序支持不同的语言.我为每种语言创建了一个目录,然后根据当前的语言环境选择正确的目录:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:[language stringByAppendingPathExtension:@"html"];];
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
// Fallback to english
path = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@"en.html"];
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能更好地处理这个而不是必须做上述(这有点乱)?
我想也许是使用xx.lproj目录这个不知何故,并把本地化HTML 目录中的每个xx.lproj目录,并使用NSBundle pathForResource找到正确的文件.虽然无法让它工作.
我见过的所有UI Automation 示例都使用标准组件,可以使用该value()方法使用JavaScript API检查其状态.这有点限制.让我们说你想检查颜色或alpha值等等.
如何检查视图的属性?
例如:点击某个元素应该使其"选中".我想对它进行点击,然后验证isSelected是否为TRUE.
更新:
我找到了理论上应该执行的withPredicate()方法,除了它似乎只触发name属性:
element.withPredicate("isSelected == YES") // always fails
element.withPredicate("name matches 'my element'") // works
Run Code Online (Sandbox Code Playgroud) 我需要在列表中添加对象(使用List语义),同时保持列表中的所有对象都是唯一的.我认为LinkedHashSet会这样做,但"重新插入"条款打破了这个:
LinkedHashSet<String>list = new LinkedHashSet<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
System.out.println (list);
Run Code Online (Sandbox Code Playgroud)
以上输出是:[a, b, c],不是[b, c, a]我想要的.
Java中是否有这样的数据结构来处理这种情况?
我有一个带有自定义模型的组件(扩展了wicket标准的Model类).当Wicket调用时,我的模型从数据库/ Web服务加载数据getObject().
此查找可能由于多种原因而失败.我想通过在带有组件的网页上显示一条好消息来处理这个错误.最好的方法是什么?
public class MyCustomModel extends Model {
@Override
public String getObject() {
try {
return Order.lookupOrderDataFromRemoteService();
} catch (Exception e) {
logger.error("Failed silently...");
// How do I propagate this to the component/page?
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
请注意,错误发生在模型内部,该模型与组件分离.
我正在使用apache作为前端http代理.我需要将一个带有特定环境变量值的标头发送到所有代理请求.像这样:
RequestHeader set myheader %{FOO}e
Run Code Online (Sandbox Code Playgroud)
问题是env变量的值FOO必须是base64编码的.是否可以动态地对该标头值进行b64编码?
mod_rewrite的?子请求?自定义模块?...
顺便说一句,env变量是由另一个apache模块创建的,遗憾的是我无法修复.
我正试图在iPhone的后台运行一个长时间的任务.我开始吧performSelectorInBackground.我还在NSTimer主线程上创建一个只是为了检查是否有效.我期望计时器会在另一个线程运行时运行:
- (void)viewDidLoad
{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self
selector:@selector(onTimerEvent:)
userInfo:nil repeats:YES];
[self performSelectorInBackground:@selector(lengthyMethod) withObject:nil];
NSLog(@"Here we go!");
}
- (void)onTimerEvent:(NSTimer *)timer
{
NSLog(@"timer!");
}
Run Code Online (Sandbox Code Playgroud)
该lenghtyMethod执行的东西很多,包括使用URL下载ASIHTTPRequest等.
输出NSLog如下所示:
2011-03-11 15:17:07.470 MyApp[6613:207] Here we go!
2011-03-11 15:17:07.570 MyApp[6613:207] timer!
2011-03-11 15:17:07.670 MyApp[6613:207] timer!
// ... several seconds of output from lenghtyMethod omitted ...
2011-03-11 15:17:11.075 MyApp[6613:207] timer!
2011-03-11 15:17:11.170 MyApp[6613:207] timer!
// ... etc ... timer runs as expected when the call …Run Code Online (Sandbox Code Playgroud) 使用 .NET 的System.Drawing.GraphicsGDI 东西,我有一个由两个点数组组成的形状。它们是下图中的红色和绿色像素。
现在我试图用颜色填充这个形状的内部。把它画成简单的线条就可以了。像这样:
g.DrawCurve(Pens.Red, points1);
g.DrawCurve(Pens.Green, points2);
Run Code Online (Sandbox Code Playgroud)
这给出了左图 (1)。
替代文本 http://lisa.xms.se/wic/filled.png
为了填充这个东西,我尝试使用GraphicsPath这样的:
GraphicsPath gp = new GraphicsPath();
gp.AddCurve(points1);
gp.AddCurve(points2);
g.FillPath(Brushes.Blue, gp);
Run Code Online (Sandbox Code Playgroud)
它有效......有点。问题是当形状重叠时,如中间图像 (2) 所示,并且不会填充重叠部分。
我尝试使用gp.widen()来获取轮廓,然后填充:
gp.Widen(new Pen(Color.Blue, 3));
g.FillPath(Brushes.Blue, gp);
Run Code Online (Sandbox Code Playgroud)
这应该可行,但它似乎只填充了形状外部的3 像素切片,而不是整个形状,如图 (3) 所示。
有什么想法如何解决这个问题吗?
我需要用Wicket创建一堆html邮件.但afaik Wicket需要一个servlet上下文.
所以我正在寻找一种方法来使用Wicket作为html的简单渲染器.也就是说,渲染我的Page对象,而不必启动servlet引擎.
在本质上:
String renderPageToHtml (Page page) {
/*
1. Instantiate wicket.
2. Render page to String
3. Return it.
*/
}
Run Code Online (Sandbox Code Playgroud) iphone ×4
ios ×3
java ×2
wicket ×2
.net ×1
agile ×1
apache ×1
base64 ×1
c# ×1
code-cleanup ×1
coding-style ×1
collections ×1
debugging ×1
estimation ×1
fonts ×1
gdi+ ×1
graphics ×1
http-headers ×1
javascript ×1
localization ×1
mod-rewrite ×1
nstimer ×1
objective-c ×1
scrum ×1
servlets ×1
uilabel ×1
uiview ×1