android 模态透明窗体,模态出一个半透明的viewcontroller

有些时候,需要一个半透明的视图来做筛选或者展示一些界面,但是又不想遮挡到下边的视图,有两种方式可以实现

1、自定义一个半透明的view(当然,可以用xib来做,也不是很难),这个也是很好的一个方式。

2、直接模态出一个viewcontroller,我们就来说说这个东西

核心代码很简单

//translucenceView的view背景色设为半透明的

let translucenceView = translucenceViewController()

translucenceView.modalPresentationStyle = .overCurrentContext

self.definesPresentationContext = true

self.present(translucenceView, animated: false, completion: nil)

先来看一下这个modalPresentationStyle有什么类型(注意,对应的type是在哪个版本之后才有的,根据自己的app支持版本来看能不能用)

//跳转之后覆盖整个屏幕,不透明

UIModalPresentationFullScreen = 0,

//跳转之后覆盖整个屏幕,不透明

UIModalPresentationPageSheet

//跳转之后覆盖整个屏幕,不透明

UIModalPresentationFormSheet

//跳转之后覆盖当前内容(除导航栏和标签栏部分),不透明

UIModalPresentationCurrentContext

//跳转之后显示自定制视图(默认是覆盖整个屏幕),可以透明

UIModalPresentationCustom

//跳转之后覆盖整个屏幕,可以透明

UIModalPresentationOverFullScreen

//跳转之后覆盖当前内容(除导航栏和标签栏部分),可以透明

UIModalPresentationOverCurrentContext

//跳转之后覆盖整个屏幕,不透明

UIModalPresentationPopover

再来看这个definesPresentationContext,是个布尔值,是否用当前视图控制器做背景,举个例子吧,如果当前视图控制器是push出来的,然后模态出了半透明视图,当definesPresentationContext是true的时候,你是可以左滑返回的,如果是false,就不能左滑返回。

如果想自定义一个转场动画也是可以的

//创建动画

CATransition * transition = [CATransition animation];

//设置动画类型(注意,最好是用苹果暴露出来的api,要不然会因为涉及私有api被拒的)

/*

kCATransitionFade 交叉淡化过渡

kCATransitionMoveIn 新视图移到旧视图上面

kCATransitionPush 新视图把旧视图推出去

kCATransitionReveal 将旧视图移开,显示下面的新视图

pageCurl 向上翻一页

pageUnCurl 向下翻一页

rippleEffect 滴水效果

suckEffect 收缩效果,如一块布被抽走

cube 立方体效果

oglFlip 上下翻转效果

*/

transition.type = @"moveIn";

//动画出现方式

/*

kCATransitionFromRight;

kCATransitionFromLeft(默认值)

kCATransitionFromTop;

kCATransitionFromBottom

*/

transition.subtype = @"fromRight";//这里,我用的是字符串赋值

//动画时间

transition.duration = 0.3;

//移除当前window的layer层的动画

[self.view.window.layer removeAllAnimations];

//将定制好的动画添加到当前控制器window的layer层

[self.view.window.layer addAnimation:transition forKey:nil];

这样,就模态出了一个半透明的视图控制器,有时候,你发现,上边所有的子视图都成了半透明的了,附上解决方法

如果是代码给半透明视图的view设置的背景色,需要这样

view.backgroundColor = UIColor.init(colorLiteralRed: 0.2, green: 0.2, blue: 0.2, alpha: 0.5)//这里,不要这样设置 view.alpha,这个view的alpha是会传递的,所以所有的子视图都是半透明的了

如果是用xib来设置的,需要这样

3376a007454e

1.png

这里的1就是view.alpha,这里要设置为1,这样子视图就不会是半透明的了

2就是视图的背景色的alpha设置这个来改变视图的透明程度。

至此,就可以顺利的模态出想要的半透明效果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到多模态代码案例时,一个常见的例子是图像分类。在这个案例中,我们可以使用多种模态(例如图像和文本)来对图像进行分类。 以下是一个简单的多模态图像分类的代码案例: ```python import torch import torch.nn as nn import torchvision.models as models import torchvision.transforms as transforms from PIL import Image # 加载预训练的图像分类模型和文本分类模型 image_model = models.resnet50(pretrained=True) text_model = nn.Linear(1000, 10) # 假设有一个文本分类模型,输入维度为1000,输类别数为10 # 图像预处理 image_transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 文本预处理 def preprocess_text(text): # 文本预处理逻辑 pass # 加载图像和文本数据 image_path = 'path/to/image.jpg' text = 'example text' # 图像分类 image = Image.open(image_path) image = image_transform(image) image = image.unsqueeze(0) # 添加batch维度 image_features = image_model(image) # 文本分类 text_features = preprocess_text(text) text_features = torch.tensor(text_features).unsqueeze(0) # 添加batch维度 text_output = text_model(text_features) # 多模态融合和分类 combined_features = torch.cat((image_features, text_output), dim=1) classification_output = nn.Linear(combined_features.size(1), num_classes)(combined_features) # 打印分类结果 _, predicted_class = torch.max(classification_output, 1) print('Predicted class:', predicted_class.item()) ``` 这个案例中,我们使用了一个预训练的图像分类模型(ResNet-50)和一个简单的文本分类模型。首先,我们对图像进行预处理,然后使用图像模型提取图像特征。接下来,我们对文本进行预处理,并使用文本模型提取文本特征。最后,我们将图像特征和文本特征进行融合,并使用一个线性层进行分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值