当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS实现头部拉伸效果

iOS实现头部拉伸效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

仰月钱,猪猪猫论坛,电视剧打狗棍剧情介绍

本文实例为大家分享了ios实现头部拉伸效果展示的具体代码,供大家参考,具体内容如下

主要涉及到导航栏透明度、图片拉伸、列表头部等。

  • 导航栏透明度的实现。
  • 列表拖动距离的监听,及图片放大的实现。

导航透明度的设置

添加系统导航栏的category实现

声明部分:

@interface uinavigationbar (backgroundcolor)
- (void)lt_setbackgroundcolor:(uicolor *)color;
@end

实现部分:

#import <objc/runtime.h>

@implementation uinavigationbar (backgroundcolor)
static char overlaykey;

- (uiview *)overlay
{
  return objc_getassociatedobject(self, &overlaykey);
}

- (void)setoverlay:(uiview *)overlay
{
  objc_setassociatedobject(self, &overlaykey, overlay, objc_association_retain_nonatomic);
}

- (void)lt_setbackgroundcolor:(uicolor *)color
{
  if (!self.overlay) {
    [self setbackgroundimage:[uiimage new] forbarmetrics:uibarmetricsdefault];
    // insert an overlay into the view hierarchy
    self.overlay = [[uiview alloc] initwithframe:cgrectmake(0, -20, [uiscreen mainscreen].bounds.size.width, self.bounds.size.height + 20)];
    self.overlay.autoresizingmask = uiviewautoresizingflexiblewidth|uiviewautoresizingflexibleheight;
    [self insertsubview:self.overlay atindex:0];
  }
  self.overlay.backgroundcolor = color;
}

@end

监听列表拖动及实现图片放大

主要是监听滚动的距离(scrollviewdidscroll:方法)

#import "stretchviewcontroller.h"
#import "uinavigationbar+backgroundcolor.h"

// 背景图片的宽高比例
#define ratio 0.8

@interface stretchviewcontroller () <uitableviewdelegate, uitableviewdatasource>

// 可放大的背景图片
@property (nonatomic, strong) uiimageview *bgview;
// 记录原始大小
@property (assign) cgrect originalframe;

@property (nonatomic, strong) uitableview *tableview;
@end

@implementation stretchviewcontroller

- (void)viewwillappear:(bool)animated
{
  [super viewwillappear:animated];
  //[self.navigationcontroller setnavigationbarhidden:yes animated:animated];

  //self.navigationcontroller.navigationbar.tintcolor = [uicolor whitecolor];
  //self.navigationcontroller.navigationbar.bartintcolor = [uicolor clearcolor];
  //self.navigationcontroller.navigationbar.backgroundcolor = [uicolor clearcolor];
  // 设置导航栏底部分割线为透明
  [self.navigationcontroller.navigationbar setshadowimage:[uiimage new]];
}

- (void)viewdidload {
  [super viewdidload];
  // 设置全透明
  [self.navigationcontroller.navigationbar lt_setbackgroundcolor:[[uicolor greencolor] colorwithalphacomponent:0]];

  // do any additional setup after loading the view.
  self.view.backgroundcolor = [uicolor lightgraycolor];

  self.bgview = [[uiimageview alloc] initwithframe:cgrectmake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width*ratio)];
  self.bgview.image = [uiimage imagenamed:@"bg-mine"];
  self.originalframe = self.bgview.frame;
  [self.view addsubview:self.bgview];

  self.tableview = [[uitableview alloc] initwithframe:cgrectmake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64) style:uitableviewstyleplain];
  self.tableview.backgroundcolor = [uicolor clearcolor];
  self.tableview.showsverticalscrollindicator = no;
  self.tableview.delegate = self;
  self.tableview.datasource = self;

  // 1. contentinset
  //table.contentinset = uiedgeinsetsmake(160, 0, 0, 0);

  // 2. heatview
  uiview *headview = [[uiview alloc] initwithframe:cgrectmake(0, 0, self.view.bounds.size.width, 160)];
  headview.backgroundcolor = [uicolor clearcolor];
  self.tableview.tableheaderview = headview;
  [self.view addsubview:self.tableview];
}

- (nonnull uitableviewcell *)tableview:(nonnull uitableview *)tableview cellforrowatindexpath:(nonnull nsindexpath *)indexpath {
  uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:@"cellidentifier"];
  if (cell == nil) {
    cell = [[uitableviewcell alloc] initwithstyle:uitableviewcellstylevalue1 reuseidentifier:@"cellidentifier"];
  }
  cell.textlabel.text = @"测试数据";
  return cell;
}

- (nsinteger)tableview:(nonnull uitableview *)tableview numberofrowsinsection:(nsinteger)section {
  return 10;
}

- (void)scrollviewdidscroll:(uiscrollview *)scrollview
{

  cgfloat yoffset = scrollview.contentoffset.y; // 向上滑动,offset是增加的;向下滑动,是减少的
  if (yoffset < 160) { // 当滑动到导航栏底部时
    cgfloat coloralpha = yoffset/160;

//    self.navigationcontroller.navigationbar.backgroundcolor = [[uicolor whitecolor] colorwithalphacomponent:coloralpha];
    [self.navigationcontroller.navigationbar lt_setbackgroundcolor:[[uicolor whitecolor] colorwithalphacomponent:coloralpha]];

  } else { // 超过导航栏底部了
    [self.navigationcontroller.navigationbar lt_setbackgroundcolor:[uicolor whitecolor]];
  }

  // 往上滑动效果、处理放大效果
  if (yoffset > 0) {
    self.bgview.frame = ({
      cgrect frame = self.bgview.frame;
      frame.origin.y = self.originalframe.origin.y - yoffset;
      frame;
    });
  } else { // 往下移动,放大效果
    self.bgview.frame = ({
      cgrect frame = self.originalframe;
      frame.size.height = self.originalframe.size.height - yoffset;
      frame.size.width = frame.size.height/ratio;

      //
      frame.origin.x = self.originalframe.origin.x - (frame.size.width - self.originalframe.size.width)/2;
      frame;
    });
  }

}
@end

以上是对系统原生的导航栏进行透明度设置。

也可进行自定义视图设置为导航栏

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网