小编Hun*_*r D的帖子

iOS:如何使用Quartz测量字符串的宽度和高度?

在我提出问题之前,这是来自Apple的文档:如何使用Quartz确定字符串的宽度:

如果文本测量对您的应用程序很重要,则可以使用Quartz 2D函数计算它们.但是,您可能首先考虑使用ATSUI,其优势在于文本布局和测量.ATSUI有几个获取文本度量的函数.您不仅可以获得布局后文本指标,而且在极少数情况下需要它们,您可以获得布局前文本指标.与Quartz不同,您必须自己执行计算,ATSUI会为您计算测量值.例如,您可以通过调用ATSUI函数ATSUMeasureTextImage来获取文本的图像边界矩形.

如果您决定Quartz文本比ATSUI(或Cocoa)更适合您的需求,您可以按照以下步骤在Quartz绘制之前测量文本的宽度:

  1. 调用函数CGContextGetTextPosition以获取当前文本位置.
  2. 使用函数CGContextSetTextDrawingMode将文本绘制模式设置为kCGTextInvisible.
  3. 通过调用函数CGContextShowText绘制文本以在当前文本位置绘制文本.
  4. 通过调用函数CGContextGetTextPosition确定最终文本位置.
  5. 从结束位置减去起始位置以确定文本的宽度.

这是我的问题:

  1. 这真的是使用Core Graphics确定字符串宽度的最佳方法吗?它似乎很脆弱,因为我的文本与2D图形元素共存,我想对所有渲染使用相同的上下文.我希望有一些紧凑的方法,如:

    CGContextGetTextWidthAndHeight(context, text);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我读到ATSUI已经过时,将被Core Text取代.这是真的,如果是这样,是在iOS吗?

objective-c quartz-graphics core-text ios

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

尝试UNINSTALL_SHORTCUT但快捷方式不会消失

我创建了一个测试Activity,它在Android主屏幕上安装了自己的快捷方式.单击按钮时,Activity应该删除它刚刚创建的相同快捷方式.但是,我没做什么似乎删除了快捷方式.

这是Java代码(ShortcutTest.java):

import java.net.URISyntaxException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ShortcutTest extends Activity {
    String shortcutUri;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        addShortcut(getBaseContext());

        Button button = (Button)findViewById(R.id.Button01);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                removeShortcut(getBaseContext());
                finish();
            }
        });
    }

    public void addShortcut(Context context) {
        Intent shortcutIntent = new Intent();
        shortcutIntent.setClassName("com.telespree.android.client", "com.telespree.android.client.ShortcutTest");
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "ShortcutTest");
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, …
Run Code Online (Sandbox Code Playgroud)

android shortcut manifest android-intent android-activity

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