如何iBooks应用程序格式在不同网页上的文字?

纵观iBooks应用程序,我想知道它是如何完成格式化文本(可能是一个非常简单的txt文件),因此它是不可滚动的,但在不同的页面划分。

我想达成的目标是相同的,但只可编辑的文本。

我会在哪里需要开始? 因为它滚动的UITextView不起作用。 即使我设置pagingEnabled属性为YES,也不会做的工作。

看来,如果我需要限制,我可以把某个网页上的文字量。 是否有限制的UITextView的输入功能? 我需要限制线(而不是字符),因为它们将一个完整的iPhone屏幕上显示的号码(我想你可以容纳20个左右的线路,根据字体大小)。

任何帮助,将不胜感激! 由于我是一个初学者,我特别欣赏其中类似的方法被投入使用的样本。

谢谢!

--------------解决方案-------------

你需要的是一个自己的布局算法,需要的文字,测量其大小,直至适合单页文本视图削减它。 然后用文本的其余部分,同样的事情下一个文本视图启动等等......在那之后(或算法中)你安排在滚动视图中的所有生成的文本视图(或一个数组,你后来翻阅分页动画 - 如果你喜欢它俗气)。 我做了类似的事情,但UILabels,它也应该与textviews工作。 你需要的是: NSString's - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size和R angeOfString:@" " options:NSBackwardsSearch (找字空格)和substringFromIndex: 。RESP substringToIndex:

如果您需要了解更多信息,只是发表评论。

编辑:

你好下面的代码没有进行测试,但包含了大部分你需要什么(希望),但可能会举行一些错误,尤其是当它涉及到递归......我纠正了BackWardsSearch主意,因为这可能需要一段时间looong切长文本。 我完全忽略 - 这可能是非常棘手的 - 是重新绘制,同时编辑。 但无论如何,这里的代码。 这是假定老4名成员(头文件不贴)一个视图控制器:

UIView *editableBook;
NSMutableArray *content;
int currentPage;
UIFont *font;

这是控制器本身:

//
// EditableBookController.m
//
// Created by Kai on 09.03.11.
//

#import "EditableBookController.h"

@implementation EditableBookController

-(id)initWithText:(NSString *)text
{
if (self=[super init])
{
font = [UIFont fontWithName:@"SomeFont" size:12];
content = [[NSMutableArray alloc]init];
[self cutInPages:text];
currentPage = 0;
}
return self;
}

- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:CGRectMake(.0, .0, 768., 1024.)];//assuming portrait only ...
editableBook = [[UIView alloc]initWithFrame:self.view.bounds];//could be a scroll view in alternate approach
UISwipeGestureRecognizer *flipper = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(nextOrPrevious:)];
[editableBook addGestureRecognizer:flipper];
[flipper release];
[self.view addSubview:editableBook];
UITextView *textView = [[UITextView alloc]initWithText:[content objectAtIndex:currentPage]];
textView.frame = editableBook.bounds;
textView.font = font;
textView.tag = 23;
[editableBook addSubview:textView];
[textView release];
}

-(void)nextOrPrevious:(id)sender
{
UISwipeGestureRecognizer *flipper = (UISwipeGestureRecognizer*)sender;
if(flipper.direction == UISwipeGestureRecognizerDirectionLeft)
{
[self next];
}
else if(flipper.direction == UISwipeGestureRecognizerDirectionRight)
{
[self previous];
}
}

-(void)next
{
if(currentPage == content.count - 1)
{
return;
}
currentPage++;
UIView *fromView = [editableBook viewWithTag:23];
UIView *toView = [[UITextView alloc]initWithText:[content objectAtIndex:currentPage]];
toView.frame = editableBook.bounds;
toView.tag = 23;
[UIView transitionWithView:editableBook duration:0.2 options:UIViewAnimationTransitionFlipFromRight
animations:^
{
[fromView removeFromSuperview];
[editableBook addSubview:toView];
}
completion:NULL];
}

-(void)previous
{
if(currentPage == 0)
{
return;
}
currentPage--;
UIView *fromView = [editableBook viewWithTag:23];
UIView *toView = [[UITextView alloc]initWithText:[content objectAtIndex:currentPage]];
toView.frame = editableBook.bounds;
toView.tag = 23;
[UIView transitionWithView:editableBook duration:0.2 options:UIViewAnimationTransitionFlipFromLeft
animations:^
{
[fromView removeFromSuperview];
[editableBook addSubview:toView];
}
completion:NULL];
}

-(void)cutInPages:(NSString *)text
{
NSRange whereToCut = whereToCut = [text rangeOfString:@" "];
NSString *pageText = [text substringToIndex:whereToCut.location];
NSString *rest = [text substringFromIndex:whereToCut.location];;
CGFloat height = 0;
while (height<1024.)
{
NSRange whereToCut = [rest rangeOfString:@" "];
NSString *wordOfRest = [rest substringToIndex:whereToCut.location];
pageText = [NSString stringWithFormat:@"%@%@", pageText, wordOfRest];
rest = [rest substringFromIndex:whereToCut.location];;
CGSize size = [pageText sizeWithFont:font
constrainedToSize:CGSizeMake(768., 10000)
lineBreakMode:UILineBreakModeWordWrap];
height = size.height;
}
if(height>1024.)
{
//TODO cut the last word of pageText and prepend to the eest
}
[content addObject:pageText];
if([rest length] > 0)
{
[self cutInPages:rest];
}
}

- (void)dealloc
{
[editableBook release];
[content release];
[super dealloc];
}

@end

我还没有看到源代码,但我愿意以保证他们使用的CoreText框架做他们的分页和渲染。 然而,要注意的是,当它说“低水平”,这意味着。 这是一个框架,直接呈现人物的交易。 像人物选择和插入(你很可能要为可编辑的文本)的东西是CoreText相当困难的。

我建议你去与NSString图纸和尺寸是UIKit框架的一部分方法。 但即便如此,你将不得不做相当多的工作来获得这一功能。 我不认为UIKit中提供了不滚动文本编辑控制。 我们假设,如果你想编辑的文字,这将是一个任意长度,这意味着我们把它放在一个滚动的容器内(这样它可以是任何长度)。

简而言之,如果你是一个初学者,我建议做别的事情。 什么你问的是不是一件容易的事。 :)

分类:iphone 时间:2012-01-01 人气:0
分享到:

相关文章

  • iPhone SDK:告诉UIWebView中不加载图像和CSS只是普通的HTML和JS? 2013-03-25

    有没有办法告诉一个UIWebView无法加载图像和CSS更快的渲染? 解决方案:URL过滤的UIWebView的iPhone上的 --------------解决方案------------- 使用媒体查询. 第一个说,"如果它不是一个iphone,正常使用样式表",第二个说:"如果这是一个iphone,实现样式规则:不显示图像": <link type="text/css" rel="stylesheet" media

  • 在UIButton的点击iPhone SDK中隐藏的UITextView 2012-01-21

    即时通讯新到iPhone SDK编程,并一直停留在这个问题上几天. 我想一个按钮,切换一个UITextView. 第一次单击显示文本框,第二次点击将它隐藏等等. 这听起来很简单 --------------解决方案------------- 创建的UIButton的实例,并设置其目标是将切换的UITextView实例的隐藏属性的方法. 例如,假设你有一个名为disappearingTextView UITextView的实例变量. - (void)loadView { [super loadVi

  • 如何更改使用UIWebView的字体颜色/尺寸/类型的PDF文件资源的iPhone SDK 3.0版本 2012-06-15

    我试图在iPhone SDK 3.0版本显示PDF文件. 我能够显示PDF文件. 但我想改变它的字体大小/类型/颜色. PDF文件还conatins图像. 请问有什么办法可以在使用的UIWebView PDF文件的改变字体大小/颜色/类型? 如果没有则是另一种选择是提供给显示PDF文件而非UIWebView的? --------------解决方案------------- 的UIWebView不给在其上显示,向用户内容的任何控制研究. 通过web视图我们不能字体大小或样式更改任何PDF内容.

  • 如何在iPhone SDK的视图中选择面源从一个UIWebView? 2012-12-19

    iPhone SDK: 像Web浏览器那样,用户选择任何文本区域,然后按右键然后选择查看源文件. 浏览器会显示所选区域来源. 现在我要实现相同的功能UIWebview ? 用户打开网页在应用程序内浏览器(在UIWebview ),用户选择任何文本区域,我想获得选定的文本面源,这可怎么在IOS SDK来完成?

  • 什么是iPhone SDK的缺失? 2012-02-11

    我一直在做移动应用程序的开发时间长(2001年),但我们曾与当时的系统是专用移动开发环境(的Symbian,J2ME,BREW). iPhone SDK的是Mac OS X和苹果公司采取移动(可可触摸)的一个奇怪的混合体. 但它缺少一些东西,其他的手机系统有,海事组织. 特别: 应用程序后台处理 短信/彩信的应用程序路由(发送短信到我的应用程序在后台) 访问手机功能的API /通话记录/呼叫拦截 我知道苹果有释放的SDK,他们做的方式完全有效的原因. 我很好奇是什么人有这样想法的SDK是失踪,他

  • 如何在iPhone SDK应用程序通过JavaScript提交表单? 2012-04-05

    我需要张贴在装载形式UIWebview通过JavaScript注入(iPhone SDK /目标C). 我用document.form.submit()这是行不通的. --------------解决方案------------- 要访问您的表单,你需要从数组的形式把它. 使用表单的name属性作为数组key . 这应该是这样的: document.forms['formName'].submit();

  • iPhone SDK - 的WebView活动指示灯 2012-07-18

    嗨,我有一个很大的问题,在iPhone SDK的UIWebView的. 我有一个web视图上的每个选项卡(除了第一个)一个TabBarApplication. 因为它需要安静一段时间来加载的意见,我想表现出活动的指标. 下面是我使用,以做到这一点的代码: -(void)webViewDidStartLoad:(UIWebView *) portal { [UIApplication的sharedApplication] .networkActivityIndi​​catorVisible = Y

  • 如何检查上iPhone SDK的活动的Internet连接? 2012-07-23

    我想检查我是否有对iPhone的互联网连接使用可可触摸库. 我想出了一个办法用一个做到这一点NSURL 就是我做的似乎有点不可靠的(因为即使谷歌有一天下来,并依靠第三方似乎不好),而我可以检查的一些其他网站响应如果谷歌没有回应,但它确实似乎浪费和对我的应用程序不必要的开销. - (BOOL) connectedToInternet { NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"ht

  • 在web视图在iPhone SDK中打开链接或Safari从PDF页面? 2012-10-22

    我从最近几天的工作,PDF阅读器. 我有很多的在处理使用Quartz 2D PDF问题. 目前,我想要做的就是我的PDF中有链接. 我想打开一个UIWebView或Safari此链接. 是否有可能使用石英2D. 我曾在web视图中显示PDF尝试过,但那么即使它不工作. 我需要在任何Safari或一个UIWebView来打开PDF文件的链接. 编辑:我已经显示我的PDF. 这PDF有文字和另一个网站的链接. 当我点击该链接我要打开该网站,没有任何PDF. 我知道我是怎么来打开PDF想知道如何从PD

  • 我怎么能直接与iPhone SDK的加载矢量图像? 2012-11-15

    我怎么能直接与iPhone SDK的加载矢量图像? 正如UIImage的负载位图图像. --------------解决方案------------- 随着iPhone OS 2.1,iPhone的WebKit的支持SVG图形本身. 应该能够使用一个UIWebView加载SVG元素进行显示. 这个问题提供了一些示例代码这样做. 我这样做是最近使用PDF格式. 我直接保存一些分辨率无关的图像从Illustrator(使用最小的文件大小预置). 我有一些代码(学家)在这里.

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.368 (s). 10 q(s)