Quartz 2D drawRect方法(iPhone)

我有4种不同的iPhone / Cocoa / Core Animation / Objective-C书籍,还有很多来自networking的示例代码。 然而,不知何故,我仍然觉得我错过了一些关于如何在Quartz 2D中进行绘图的基本知识。 drawRect()意味着只是一个钩子来执行您的绘图代码? 或者,这种方法是否也应该重新绘制“已损坏”的区域,并且需要重新绘制? 我可以只画一次,然后“粘住”,或者我必须通过drawRect()随时重绘整个场景吗? Java的Graphics2D对象是这样工作的 – 每次调用paint()时都必须绘制整个“图像”,因此您必须随时准备重新构build它(或caching它)。 你将如何实现一个简单的绘图程序? 你将不得不“记住”用户绘制的每一行/点/笔画,并且每次调用drawRect()时drawRect()复制这个笔画? 如何“离屏”渲染; 你可以做所有的绘画,然后调用[self setNeedsDisplay]让你的写入刷新到屏幕上? 让我们说,为了响应用户的触摸,我想在他触摸的屏幕上放置一个“X”。 X应保持在那里,每个新的触摸产生另一个X.我是否需要记住所有这些触点坐标,然后将它们全部绘制在drawRect() ? 编辑: 除非我误解,joconor和Hector Ramos的回答是相互矛盾的。 这很好地certificate了我对这个问题的困惑。 🙂

本地化资产目录

我知道这是一个新function,这可能是不可能的,但我希望能够以不同的语言本地化资产目录,以显示本地化的启动图像。 这是可能的XCode 4只是本地化的图像,但与iOS7应用程序不起作用。 你知道这可能吗?

string数组中的stringsearch在目标c中

我想在目标c中的string数组中search特定的string。 有人可以在这方面帮助我吗?

UItesting失败 – 无论是元素还是任何后代都没有关注secureTextField的键盘

这是我的情况: let passwordSecureTextField = app.secureTextFields["password"] passwordSecureTextField.tap() passwordSecureTextField.typeText("wrong_password") //here is an error 用户界面testing失败 – 任何元素或任何后代都没有键盘焦点。 元件: 哪里不对? 这对正常的textFields secureTextFields用,但问题只出现在secureTextFields 。 任何解决方法?

好的教程或在IOS 7中使用Core.Data

我一直在尝试使用这个教程 。 但我希望它被保存在主线程以外的线程中。 到目前为止,我无法得到上面的教程工作? 我也试过这个 有任何想法吗?

如何在iPhone上闪烁(或闪烁)光标?

我试图在UIKit中创build一个自定义的“闪烁的光标”,我已经尝试了如下所示,有2个函数,基本上保持相互调用,直到光标被隐藏。 但是,这导致了一个很好的无限recursion…出于某种原因,函数立即调用对方,而不是每半秒如预期。 如果“finished”参数不是YES(通过取消注释“if(!ok)”行),但是这导致根本没有animation… 更好的主意? 我错过了什么,有没有一个更简单的方法来做一个“闪烁的光标”? – (void)onBlinkIn:(NSString *)animationID finished:(BOOL)ok context:(void *)ctx { if (cursorView.hidden) return; //if (!ok) return; [UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:0.5f]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(onBlinkOut:finished:context:)]; cursorView.textColor = [UIColor grayColor]; [UIView commitAnimations]; } – (void)onBlinkOut:(NSString *)animationID finished:(BOOL)ok context:(void *)ctx { if (cursorView.hidden) return; [UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:0.5f]; [UIView setAnimationDelegate:self]; […]

什么types的web服务最适合iOS?

我将为iPhone和iPad创build一个内部应用程序,以便跟踪销售电话,相关报价,照片和这些报价的图纸。 我仍然处于概念devise阶段,我正在尝试阅读我的应用程序和web服务之间的不同沟通方式。 显然,因为这将主要用于3G或…边缘我想要一个有效的协议,所以我的直觉反应是远离基于XML的东西,如XML-RPC或SOAP。 我想在服务器上使用PHP和MySQL,并计划在iOS上使用Core Data。 所以我有几个具体的问题: 我应该用什么scheme来performance? 我应该在服务器上使用哪种scheme以方便使用? 我应该使用什么scheme来简化在iOS上的工作? 考虑到整个项目,我应该使用什么scheme? 尽pipe存在networking开销,是否更好地使用基于XML的scheme? 为什么?

正确显示和解除iOS 3.2中的全屏MPMoviePlayerController(iPad)

我在iPad应用程序中显示全屏电影时遇到了很多麻烦,然后允许用户使用播放器控件上的“完成”button或“全屏”button将其解除。 最初我使用MPMoviePlayerViewController进行电影演示,但是我没有收到来自MPMoviePlayerController对象的进入/退出全屏通知,所以我自己改变了。 我可以让电影全屏显示(尽pipe转换非常复杂),但是当按下“完成”或“全屏”button时,播放器不会执行任何操作。 我已经发布了我的代码如下: – (void)startPlayingMovieWithURLString:(NSString *)movieURLString { // I get all of these callbacks **EXCEPT** the "willExitFullScreen:" callback. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullScreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullScreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; [self.moviePlayerController setContentURL:someExistingURL]; // "self" is a UIViewController subclass, and is presented as a "fullscreen" modal view controller from […]

对使用UIBezierPath创build的弧应用渐变颜色

我想创build一个弧形的进度条。 进度条的颜色必须根据值进行更改。 我使用UIBezierPath bezierPathWithArcCenter创build了一个弧。 我使用了下面的代码: – (void)viewDidLoad { [super viewDidLoad]; int radius = 100; CAShapeLayer *arc = [CAShapeLayer layer]; arc.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:radius startAngle:60.0 endAngle:0.0 clockwise:YES].CGPath; arc.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius, CGRectGetMidY(self.view.frame)-radius); arc.fillColor = [UIColor clearColor].CGColor; arc.strokeColor = [UIColor purpleColor].CGColor; arc.lineWidth = 15; [self.view.layer addSublayer:arc]; CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; drawAnimation.duration = 5.0; // "animate […]

在iOS 7手势识别器的问题

我添加了几个UIView对象(例如5)到屏幕上,一个在另一个里面。 这个例如view5.superview = view4 , view4.superview = view3 , view3.superview=view2 , view2.superview = view1 。 对于所有这些UIView我设置uitapgesturerecognizer; 对于view1-4,我只是在callback中做NSLog(@“tap%@”,self),而对于view5,我设置了以下内容:从层次结构中删除view4,然后把相同的对象view4'放在层次结构的相同位置。 这个对象还包含view5', UITapGestureRecognizer设置UITapGestureRecognizer (实际上,我用相似的一个replace标记的一部分)。 然后我开始点击view5。 有些时候,view5一直在捕捉它的抽头,一切正常,但随后的抽头数(每当这个数字不同时),其中一个view1-4对象开始捕捉这个抽头,尽pipe我们仍然在点击view5。 整个问题具有随机性 – 有时发生在第十次发射,有时发生在第二次发射。 有时候错误的物体会在第一次敲击时开始捕捉水龙头。 当我遇到一切错误的时候,我也不知道什么东西会碰到水龙头。 视图(n + 1)的帧被设置为例如帧视图(n)的一半,而视图1的帧 – 例如(0,0 320,460)。 上述所有使用UI对象的操作都是在主线程中进行的,而且我所讲的所有关于iOS 4.3 – 6.1的工作都有很多复杂的例子。 但是iOS7使它成为某种随机的地狱。 更新:我创build了一个示例项目,以简化debugging过程。 点击不添加/删除子视图操作。 在屏幕上只有4个视图,点击应用程序logging点击的视图。 所以,你需要挖掘最小的观点(4)。 如果在日志中看到“点击4点击4点击4点…” – 这是一切正常的情况下,停止和再次运行,停止和再次运行,停止和再次运行等等。在一些运行(也许10 +成功的运行)你不会在第一行看到“点击4”,你会看到“点击1”或“点击2”或“点击3”,它会继续 – 这是坏的情况。 示例项目可以从这里下载: http : //tech.octopod.com/test/BuggySample.zip (在档案中只有33 Kb)。 更新2 […]