我想知道如何从头开始或使用现有库或框架创建自定义 iPhone 控件。
我看过 three20 库,以及 tapku 和 touch customs,它们非常适合专门的 iOS 控件,例如 TableView 等,但我在这里谈论的是制作完全自定义的交互式控件。
假设我想制作一个类似于此应用程序中的拨号控件:http://store.apple.com/us/product/H2654LL/A .
我从哪里开始?
我只是有点困惑该走哪条路。
是的 - 这个问题之前已经被问过和回答过几次,但我还没有找到解决上述问题的令人满意的答案。
最佳答案
子类化什么
您可能希望子类化 UIControl 而不是 UIView。此类具有构建目标/操作模式的功能,您可以在其中用于响应自定义控件生成的操作。出于这个特定原因,UIKit 上的大多数元素(如按钮和 slider )都继承自 UIControl。
可视化您的子类 绘图实际上取决于您想要实现的目标以及您想要制作动画的部分。您可以根据需要或偏好使用图像、 quartz 或 OpenGL 进行绘制。只需使用该技术以最简单的方式达到所需的效果。多个图像可用于处理不同的状态(按下等)或用于 Sprite 动画。 CALayers 很容易旋转或移动。
无论您使用什么技术,您都可能会使用传入的触摸事件来控制动画。例如,如果是拨盘控件,您可以根据 y 坐标移动来控制旋转量。
举例说明:例如,如果我的控件只需要在按下时更改,我就使用了图像:只需交换图像。我还喜欢经常使用 CALayer,它可以让您轻松生成边框、蒙版、渐变和圆角半径,所有这些都可以轻松制作动画。
在 Interface Builder 中使用 使用桌面上的 Cocoa,可以为自定义控件构建自定义 IB 调色板。 iOS 从来没有这个功能,我不认为 IB 插件可用于 Xcode 4。
因此目前处理自定义子类的唯一方法是在 IB 中使用 UIView 并将 Identity Inspector 中的“自定义类”字段设置为您的名称自定义类。这样你就有了一个可以布局和调整大小的 View 。在 Interface Builder 中,它只是一个矩形,当运行您的应用程序时,XIB 实际上会将该 View 反序列化为您的自定义类。
使用 UIControl 时,您可以免费获得目标/操作机制。因此,您可以将触摸事件连接到 IB 中的任何对象,就像使用任何其他标准 UIKit 控件一样。
需要注意的一件事:如果您有自定义 - initWith....: 选择器,则不会调用这些选择器。您的类是从 XIB 反序列化的,因此您应该使用 - initWithCoder:(NSCoder *)aDecoder; 作为初始化。
关于iPhone/iOS 自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874172/
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在