Tag: uiview

Swift实用程序:视图实例化变得容易

我将在本节中介绍一系列文章,以创建实用程序类/函数,这些类/函数在开发过程中会很方便,让我们从视图实例化开始 在iOS应用程序开发期间,它是实例化视图的常见用例 通常我们可以通过3种方式实例化视图 使用XIB实例化 使用情节提要实例化 以编程方式创建视图并添加约束 最后一个超出了本文的范围。 使用XIB实例化 我们必须从主捆绑包实例化xib并加载它。 在这种情况下,代码将如下所示 使用情节提要实例化 在这里,我们实例化情节提要,然后使用其标识符加载viewController。 样本可以看如下 因此,上述实现非常完美,唯一的缺点是每次需要实例化新的viewcontroller时,都必须在代码行上方复制粘贴。 一种更简单的方法可能是概括上述方法以获取有关传递可变参数的视图 继续进行下去,我们可以概括上述方法,这样就不必在每次需要实例化视图时都复制粘贴相同的代码。 请从我尝试执行的以下仓库中导入代码。 pshrinivas / ViewInstantiable 方便快捷地实例化iOS视图的实用方法– pshrinivas / ViewInstantiable github.com 在这一步骤之后,实例化视图将是小菜一碟。 视图实例化可以如下进行 使用xib进行实例化:遵循以下可实例化的协议以查看或具有xib和view的viewcontroller 使用情节提要进行实例化:将情节提要协议与ViewController一致,并将情节提要名称作为参数传递 PS: 对于使用上述回购文件名,类名,XIB名称,应保持相同,否则将不起作用。 类似的标识符与故事板中的类名相同 因此,这种方式可以在很大程度上减少冗余代码。 请对此发表您的看法。 编码愉快!!! 感谢Ganesh&Karthik的校对。 现在我们知道任何错别字应归咎于谁

UIView上的多个阴影

最近,我遇到了在单个UIView上具有多个阴影的要求。 要求非常简单: 具有1px宽度的外围阴影。 像Material design中一样,具有一个可变的环境阴影以产生高程感。 预期结果如下: 我想使这种elevation通用,以便可以应用于任何视图。 事实证明,我在这段代码上的经历与我所期望的不一样。 在本文中,我将讨论用于获得设计人员所需内容的代码的演变。 乍一看,似乎我可以将layer.border用作外围阴影,但是它并没有产生预期的结果。 使用layer.border似乎要暗得多,并且没有像使用shadow那样得到的扩散: 为了使该方法通用,我在UIView创建了一个名为applyShadows的扩展,并添加了以下代码段中所示的代码。 第一次尝试—使用BezierPaths 第一次尝试是在view layer上使用UIBezierPath : 直到我根据预期可以应用该标高的view尝试了这一切之后,一切似乎都运行良好。 如下图所示,高程代码未考虑对要应用高程的视图的子视图进行四舍五入的情况。 这导致UI损坏: 如上图所示,虽然父视图具有圆角和阴影,但subview没有圆角。 第三次尝试-阴影图层上的插图 为了解决舍入的问题,我不能使用clipsToBound因为它会导致阴影也被修剪。 作为一种解决方法,我想到了使用与cornerRadius相等的边插入量。 但是,此方法只能在某些特定情况下使用。 例如,如果subview是可滚动的,并且在滚动时期望接触父视图边界,则此方法将不起作用。 下图直观地显示了问题: 在上图中,黄色是父视图,青色是子视图。 这种方法更多的是破解而不是解决方案。 这隐藏了问题,而不是解决问题。 第4次尝试-遮罩子视图 UIView提供了一个称为mask的属性,该属性似乎是我在第三次尝试中遇到的问题的解决方案。 使用mask ,我们可以舍入子视图而不会在阴影上留下斑点: 通过这种尝试,我们解决了非四舍五入的子视图的问题,并且我们也没有任何其他插图。 尽管这种方法似乎可行,但这再次给可滚动子视图带来了问题: 在上面的gif中,蓝色是父视图的颜色,其中包含可滚动的子视图。 子视图有9个项目,但我们仅看到4个项目,因为其他项目被应用的蒙版隐藏了。 第5次尝试-使用阴影附加视图 因此,对于我不断clipToBounds的问题的解决方案很明确-我必须在视图上使用clipToBounds才能在拐角处获得所需的舍入。 这也意味着我不能再在有关视图上应用阴影。 但是,我仍然可以使用以下方法获得所需的外观: 创建与当前框架相同的其他视图。 使用子图层方法向新视图添加阴影。 将新视图放置在当前视图的后面。 在当前视图上设置clipsToBounds 。 就是这样。 奖金提示 图层名称:您必须已经注意到我已经将layer.name设置为一个值perimeterShadow 。 这用作删除/调整图层大小的标识符,在这里我可以查询所有子图层以获得阴影图层。 图层的背景颜色:如果未设置layer.backgroundColor ,则阴影不会显示。 图层动画:您可以查询图层的动画以获取关键点, position以获取视图的duration和timingFunction […]

谁可以看到一个不是isHidden的UIView?

难道只有我每次处理UIView的isHidden属性时都会大吃一惊吗? 我的直觉一直是,布尔类型的“ true”值表示存在的东西,而与不存在的“ false”值相反。 考虑到这一点,让我处理UIView的isHidden属性非常令人费解和费力。 假设我希望某些UIView在屏幕上可见。 我的想法是为UIView的某些属性设置“真”(即存在)值。 但是,相反,我必须为isHidden属性设置一个“ false”(不存在)值。 真是令人误解。 这意味着,我需要使用双重否定:不存在不存在,以简单地显示UIView。 此外,我们经常必须根据数据对象的某些布尔属性显示一些图像或其他UI元素。 每次看到这样的代码,我的脑袋都会微震: hotImage.isHidden =!article.isHot 拥有这样的代码会更好: hotImage.isVisible = article.isHot 那么,为什么不呢? 我对UIView使用了最简单的扩展: 我将此文件添加到我的所有项目中,这为我节省了很多精力。 我鼓励您也这样做。 如果您有关于Apple为什么使用isHidden而不是isVisible的线索,请告诉我。

协议深入故事

按照苹果的定义, 协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。 然后,该协议可以由类,结构或枚举采用,以提供这些要求的实际实现。 满足协议要求的任何类型都被称为符合该协议。 作为工作的一部分,我接受了iOS开发人员的面试。 什么是协议? 是我在面试中问的一个常见问题。 许多候选人试图记住上面的定义,并重复一遍。 尽管他们对此进行了努力,但许多人仍无法正确解释。 如果我问一些交叉问题,许多人将无法回答。 在刚开始的日子里,尽管我在应用程序中大量使用协议,但我在向某人解释时也难以正确解释协议。 因此,我正在写此博客,以从最基本的角度讨论协议。 在讨论协议之前,让我们假设Swift中没有协议。 通常我们将如何从一个班级交流到另一个班级? 我们需要为该类创建一个对象。 通过使用该对象,我们可以在该类中调用函数。 这很简单。 现在,让我们从一个示例开始,您已经创建了一个名为Stepper的UIVIew子类,我们需要在项目的多个视图控制器中使用该Stepper。 棘手的是,Stepper需要将视图中发生的更改通知给视图控制器。 因此,如果没有协议,Stepper应该具有视图控制器的对象。 假设有三个控制器使用步进器。 因此,对于所有这些人,Stepper应该具有对象。 然后,只有Stepper才能将消息传递到控制器。 而且,如果您想在另一个项目中使用此Stepper,则再次需要在Stepper中进行更改以兼容新项目中的视图控制器。 实际上,它将非常难以管理。 这就是协议帮助我们在项目中避免这种无意义的代码的地方。 协议有何帮助? 为了通知计数值变化,我们将创建一个带有函数的协议,该函数将通知计数值变化。 现在,我们只需要在Stepper类中为此协议创建一个对象。 var委托:StepperDelegate? 现在,我们将研究视图控制器的实现。 上面的代码指示FirstViewController是UIViewController的子类。 因此,根据继承,通过使用FirstViewController对象,我们还可以调用在UIViewController中声明的public / open函数。 现在,我们将在FirstViewController中添加StepperDelegate协议。 通过在类声明中添加StepperDelegate,我们告诉Stepper该FirstViewController也将包含在StepperDelegate协议中声明的函数的定义。 (在某种程度上,协议是继承的一部分)。 最后,每当计数更改时,Stepper都会使用StepperDelegate协议发送该消息。 协议是应用程序开发中非常有用的东西,如果我们不知道它是如何工作的,也很难解释。 希望您喜欢这篇文章。 编码愉快。

如何使自定义UIview中有iPhone圆angular?

我想使自定义UIview有圆angular。 这可能吗? 我不知道如何做到这一点。 任何专家的build议将受到欢迎。

iOS如何从Uiview中呈现Modal ViewController

我有一个UIView子类,现在我需要显示一个视图控制器,但UIView没有方法来呈现视图控制器。 这是我的问题谢谢 这是我的uiview子类中的一段代码 -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tabella isEqualToString:@"Articoli"]) { NSDictionary *itm=(NSDictionary*)[comanda objectAtIndex:indexPath.row]; Articoli *aboutViewController = [[Articoli alloc] initWithNibName:@"Articoli" bundle:nil]; aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet; aboutViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; aboutViewController.idarticolo=[itm objectForKey:@"idarticolo"]; CGRect aboutSheetFrame = aboutViewController.view.frame; UIViewController *viewController = [UIViewController new]; viewController.view = self; //here xcode give me a red error [self presentViewController:viewController animated:YES completion:nil] ; aboutSheetFrame =CGRectZero; aboutViewController.view.superview.bounds […]

重新加载UIview中的tableview

我的表视图是在一个用户界面视图,这已经完成了编写代码,现在我试图重新加载表视图中的数据,但表视图不刷新。 UIview和表视图声明如下: @interface { IBOutlet UITableView *tabView; } @property (nonatomic, strong) IBOutlet * tabView @property (nonatomic, strong) UIView * myView; // in .m file

我怎样才能resize的UIImage到特定的大小

在我的应用程序中,我正在使用相机拍摄照片并将其显示在320 * 320的UIView 。 但是由于图像的分辨率比UIView的图像分辨率还要高。 有什么办法可以调整图像大小吗?

iOS 11只有崩溃的问题 – 当我点击一个标签栏应用程序崩溃

当我只从hometabviewcontroller点击一个特定的标签栏时,我得到以下崩溃错误。 这只发生在iOS 11.请帮我解决这个问题。 2017-10-23 16:48:57.000890+0400 FixtrProvider[2520:910402] desc: -[UIView refreshControl]: unrecognized selector sent to instance 0x10af090d0 2017-10-23 16:48:57.001223+0400 FixtrProvider[2520:910402] name: NSInvalidArgumentException 2017-10-23 16:48:57.001308+0400 FixtrProvider[2520:910402] user info: (null) 2017-10-23 16:48:57.001441+0400 FixtrProvider[2520:910402] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView refreshControl]: unrecognized selector sent to instance 0x10af090d0' 以下是根据请求我的HomeTabView控制器的整个页面。 @interface HomeTabBarController () { ChatSocketIOClient *socket; } @property […]

务必在UITableViewCell中显示一个UIView

我使用下面的代码从XIB实例化UIView ,然后将其添加到选定的UITableViewCell进行显示。 当我运行代码并触摸单元格时,我可以遍历代码并看到所有内容都正确实例化(没有任何内容为零),但视图从不显示。 我有一个UIView上有几个button。 在界面生成器中,我将UIView设置为使用UIView的子类,而UIView目前没有任何代码,除了Xcode生成的模板外。 我希望有人可以指出我使用这个代码来使这个工作的任何明显的错误。 请注意,有一点我有在UITalbeViewCell内显示的UIView,但是我在某些重构过程中搞砸了一些东西,最后重写了代码来处理这个。 发生这种情况时,我不能再在单元格中显示UIView。 @implementation HZRunwayViewController { EKEvent *currentEvent; BOOL editingEvent; HZEventDrawerView *eventDrawer; } – (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Check if we are touching an event if (indexPath.section == 0 && [self.eventsForCurrentDay count]) { // Grab the selected cell and make sure it's an event cell UITableViewCell *cell = […]