小编Mar*_*man的帖子

如何在iOS中渲染拉伸文本?

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

在此输入图像描述

  1. 这与仅更改字体大小不同
  2. 将其渲染为位图然后缩放它不是一个选项(它看起来很糟糕)
  3. 矢量图形是这样做的方式

我提出了以下似乎适用于我的目的.代码绘制一行文本缩放以填充边界.子类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)

iphone fonts core-graphics uilabel ios

9
推荐指数
2
解决办法
5592
查看次数

如何在团队不稳定时管理敏捷开发?

多年来,我一直在为我的项目使用敏捷方法(XP和Scrum),效果很好.但在所有情况下,开发团队的所有成员都100%致力于该项目.

现在,当团队不稳定时,我面临这样做.例如,一次迭代可能有四个人工作,下一个可能只有两个或三个.

我意识到这使得使用正常速度方法很难(或不可能)估计,因为它会波动很大而不稳定.接下来的是,人们真的不希望能够在每次迭代结束时发布.

也许这里需要另一种方法.只需从积压的东西中抓取东西,然后尽可能地混淆和释放.我真的不喜欢那样......

有什么想法吗?

agile project-management scrum estimation

6
推荐指数
1
解决办法
896
查看次数

避免代码中的调试内容混乱

当我写东西时,一半的努力倾向于添加清晰简洁的调试输出,或者当需要调试时可以启用/禁用的功能.

调试功能的一个例子是下载器类,在这里我可以打开一个#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 ......我也在讨论像上面假装下载这样的东西.

iphone debugging coding-style objective-c code-cleanup

6
推荐指数
1
解决办法
143
查看次数

如何找到本地化目录的路径?

我需要使用我的应用程序分发包含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找到正确的文件.虽然无法让它工作.

iphone localization ios

5
推荐指数
2
解决办法
4247
查看次数

如何在iOS gui自动化中检查元素属性?

我见过的所有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)

javascript uiview ui-automation ios ios-ui-automation

5
推荐指数
1
解决办法
2488
查看次数

用于保持列表唯一且插入顺序完整的数据结构

我需要在列表中添加对象(使用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中是否有这样的数据结构来处理这种情况?

java collections data-structures

5
推荐指数
1
解决办法
6924
查看次数

如何处理Wicket自定义模型中抛出的异常?

我有一个带有自定义模型的组件(扩展了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)

请注意,错误发生模型内部,该模型与组件分离.

error-handling wicket

4
推荐指数
2
解决办法
4107
查看次数

如何base64编码apache头?

我正在使用apache作为前端http代理.我需要将一个带有特定环境变量值的标头发送到所有代理请求.像这样:

RequestHeader set myheader %{FOO}e
Run Code Online (Sandbox Code Playgroud)

问题是env变量的值FOO必须是base64编码的.是否可以动态地对该标头值进行b64编码?

mod_rewrite的?子请求?自定义模块?...

顺便说一句,env变量是由另一个apache模块创建的,遗憾的是我无法修复.

apache mod-rewrite base64 http-headers

4
推荐指数
2
解决办法
2580
查看次数

为什么在另一个线程运行时NSTimer被阻止?

我正试图在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)

iphone multithreading nstimer asihttprequest

3
推荐指数
1
解决办法
1338
查看次数

如何用重叠曲线填充 GraphicsPath?

使用 .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) 所示。

有什么想法如何解决这个问题吗?

.net c# graphics gdi+

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

如何使用Wicket在没有servlet引擎或web.xml的情况下呈现html?

我需要用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)

java wicket servlets

0
推荐指数
1
解决办法
195
查看次数