精华内容
下载资源
问答
  • live2dviewerex宅男自定义动态壁纸下载-live2dviewerex动态桌面2.0.4 官方安卓版下载_东坡手机下载
    千次阅读
    2021-05-26 18:08:33

    live2dviewerex动态桌面是一款非常有趣的手机动态壁纸,只需要QQ便能登录,在登录界面可以看到相关信息。首次进入APP有针对APP的详细帮助说明,请首次使用的用户认真阅读,上面会解决你的大多数问题。

    应用简介

    Live2DViewerEX Pro是一款管理Live2D模型的APP(加Pro是因为之前写过一个面向模型制作者的APP叫Live2DViewerEX)。目前的功能有Live2D动态壁纸,实时更换模型和背景(支持自定义图片,支持随机背景),支持各种点触事件等。模型文件不断更新中。

    目前放出的模型有

    bg.bpk 其他应用内提取的背景图片。

    Sample.lpk 官方模型

    Toaru.lpk 魔禁模型

    Sakurasou.lpk 樱花庄模型

    Shinjigen.lpk 神次元模型(更新中)

    Oreimo.lpk 俺妹模型(更新中)

    Haganai.lpk 友少模型(更新中)

    Others.lpk 其他模型

    - Mirai (MiraiClock)

    注:程序仅支持Android 4.0以上!

    Live2DViewerEX Pro操作说明

    打开App在右下角能看到四个按钮自上而下分别为:

    1. 设置页面:选择服装和背景。

    2. 调整位置:调整人物X和Y的位置及大小。

    3. 保存为壁纸:点击后保存当前背景、模型、位置和表情至动态壁纸。(必须启动Live2DViewerEX Pro动态壁纸之后才能看到效果)

    4. 切换表情:某些模型会有预置表情,长按按钮可以重置表情。

    更多相关内容
  • 用图形按钮做的GIF动画播放器易模块系统结构:动画按钮,结束动画, ======_模块_动画按钮1.0 || ||------动画按钮 || ||------结束动画 || || ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||-
  • //是否隐藏跳过按钮(默认显示) //广告点击事件 launchAd.clickBlock = ^(){ NSString *url = @"https://www.baidu.com"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; };
  • 前言 前段时间,用PyQt5写了几篇文章,关于Python自制...今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣! 首先一起来看看最终实现的自定义动态壁纸效果: ...

    前言

    前段时间,用PyQt5写了几篇文章,关于Python自制一款炫酷音乐播放器自定义桌面动画挂件车牌自动识别系统。今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣!

    首先一起来看看最终实现的自定义动态壁纸效果:
    在这里插入图片描述
    下面,我们开始介绍这个自定义动态桌面的制作过程。

    直接跳到文末获取粉丝专属福利。

    一、核心功能设计

    总体来说,我们需要实现将自己喜欢的视频转成一个动态桌面,知识点主要包含了对视频提取解析视频轮播PyQt5窗体设置桌面句柄获取自定义动态桌面壁纸实现等。

    拆解需求,大致可以整理出我们需要分为以下几步完成:

    1. UI排版布局设计,确认动态壁纸功能设计
    2. 加载视频,对视频进行预览读取,保存视频路径等
    3. 动态壁纸功能实现应用,获取桌面句柄,轮播加载视频
    4. 关闭动态壁纸,在线壁纸资源获取等

    二、实现步骤

    之前有粉丝反馈说,想自己跟着文章自己敲敲代码,但是不知道具体需要哪些模块、包文件,后面我就把所有用到模块先放出来。

    import os
    import sys
    from subprocess import call
    from threading import Thread
    from time import sleep
    
    import cv2
    from PyQt5 import QtCore,  QtWidgets
    from PyQt5.QtCore import Qt,  QTimer
    from PyQt5.QtGui import QImage, QPixmap, QIcon
    
    from PyQt5.QtWidgets import QGridLayout, QPushButton, QMainWindow, QFileDialog, QLabel, QSystemTrayIcon, \
        QAction, QMenu, QMessageBox
    from os import path as pathq
    

    1. UI排版布局设计

    根据动态壁纸所需要的功能,首先进行UI布局设计,我们这次还是使用的pyqt5。主要包含了加载读取本地视频、视频加载预览、动态壁纸应用、动态壁纸关闭等。核心设计代码如下:

    # author:CSDN-Dragon少年
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(505, 615)
        MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(22, 10, 89, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.openmp4)
        self.pushButton.setStyleSheet(
            '''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''')
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(22, 50, 452, 351))
        self.groupBox.setObjectName("groupBox")
        self.widget = QtWidgets.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(11, 20, 430, 291))
        self.widget.setObjectName("widget")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.widget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.label = QLabel(self)
        self.label.resize(400, 300)
        self.label.setText("Waiting for video...")
        self.gridLayout_3.addWidget(self.label)
        self.close_widget = QtWidgets.QWidget(self.centralwidget)
        self.close_widget.setGeometry(QtCore.QRect(420, 0, 93, 41))
        self.close_widget.setObjectName("close_widget")
        self.close_layout = QGridLayout()  # 创建左侧部件的网格布局层
        self.close_widget.setLayout(self.close_layout)  # 设置左侧部件布局为网格
        self.left_close = QPushButton("")  # 关闭按钮
        self.left_close.clicked.connect(self.close)
        self.left_visit = QPushButton("")  # 空白按钮
        #self.left_visit.clicked.connect(MainWindow.big)
        self.left_mini = QPushButton("")  # 最小化按钮
        self.left_mini.clicked.connect(MainWindow.mini)
        self.close_layout.addWidget(self.left_mini, 0, 0, 1, 1)
        self.close_layout.addWidget(self.left_close, 0, 2, 1, 1)
        self.close_layout.addWidget(self.left_visit, 0, 1, 1, 1)
        self.left_close.setFixedSize(15, 15)  # 设置关闭按钮的大小
        self.left_visit.setFixedSize(15, 15)  # 设置按钮大小
        self.left_mini.setFixedSize(15, 15)  # 设置最小化按钮大小
        self.left_close.setStyleSheet(
            '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')
        self.left_visit.setStyleSheet(
            '''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''')
        self.left_mini.setStyleSheet(
            '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''')
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.close_widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(77, 440, 133, 41))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.play)
        self.pushButton_2.setStyleSheet(
            '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''')
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(308, 440, 111, 41))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.close_wall)
        self.pushButton_3.setStyleSheet(
            '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(187, 540, 133, 21))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.openurl)
        self.pushButton_4.setStyleSheet(
            '''QPushButton{background:#222225;color:white;border-radius:5px;}QPushButton:hover{background:#222225;color:skyblue}''')
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 505, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.groupBox.setStyleSheet('''
        color:white
        ''')
        MainWindow.setWindowOpacity(0.95)  # 设置窗口透明度
        MainWindow.setAttribute(Qt.WA_TranslucentBackground)
        MainWindow.setWindowFlag(Qt.FramelessWindowHint)  # 隐藏边框
    # author:Dragon少年
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "从本地选择"))
        self.groupBox.setTitle(_translate("MainWindow", "预览"))
        self.pushButton_2.setText(_translate("MainWindow", "应用"))
        self.pushButton_3.setText(_translate("MainWindow", "关闭壁纸"))
        self.pushButton_4.setText(_translate("MainWindow", "在线资源"))
    

    UI实现效果如下:
    在这里插入图片描述
    UI布局设计完成,下面我们开始进行视频读取加载、预览功能实现。

    2. 视频加载预览

    接来下我们可以根据自己喜欢的视频,从本地读取视频,并且将视频预览播放显示。这里视频演示,博主还是用之前的那篇紫颜小姐姐的跳舞视频进行演示。

    读取视频:

    读取视频我们可以通过打开文件对话框,选择视频资源,开启一个子线程用来进行视频开启停止播放。核心代码如下:

    # author: CSDN-Dragon少年
    def openmp4(self):
        try:
            global path
            path, filetype = QFileDialog.getOpenFileName(None, "选择文件", '.',
                                                         "视频文件(*.AVI;*.mov;*.rmvb;*.rm;*.FLV;*.mp4;*.3GP)")  # ;;All Files (*)
            if path == "":  # 未选择文件
                return
    
            self.slotStart()
            t = Thread(target=self.Stop)
            t.start()  # 启动线程,即让线程开始执行
        except Exception as e:
            print (e)
    

    视频流读取播放:

    接下来,我们需要对视频文件进行按帧读取加载显示,并通过计时器实现动画效果。核心代码如下:

    # author:CSDN-Dragon少年
    def slotStart(self):
        videoName = path
        if videoName != "":  # “”为用户取消
            self.cap = cv2.VideoCapture(videoName)
            self.timer_camera.start(50)
            self.timer_camera.timeout.connect(self.openFrame)
    
    # author:CSDN-Dragon少年
    def openFrame(self):
        if (self.cap.isOpened()):
            ret, self.frame = self.cap.read()
            if ret:
                frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
                if self.detectFlag == True:
                    # 检测代码self.frame
                    self.label_num.setText("There are " + str(5) + " people.")
                height, width, bytesPerComponent = frame.shape
                bytesPerLine = bytesPerComponent * width
                q_image = QImage(frame.data, width, height, bytesPerLine,
                                 QImage.Format_RGB888).scaled(self.label.width(), self.label.height())
                self.label.setPixmap(QPixmap.fromImage(q_image))
            else:
                self.cap.release()
                self.timer_camera.stop()  # 停止计时器
    

    至此,我们已经可以实现视频读取加载,并且进行视频预览了,效果如下:

    在这里插入图片描述

    3. 动态壁纸功能实现

    实现桌面壁纸替换,我们首先需要获取桌面句柄找到桌面窗体,覆写桌面窗体、调用加载的视频流,播放动态壁纸。

    获取桌面句柄:

    # author:CSDN-Dragon少年
    def pretreatmentHandle():
        hwnd = win32gui.FindWindow("Progman", "Program Manager")
        win32gui.SendMessageTimeout(hwnd, 0x052C, 0, None, 0, 0x03E8)
        hwnd_WorkW = None
        while 1:
            hwnd_WorkW = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
            if not hwnd_WorkW:
                continue
            hView = win32gui.FindWindowEx(hwnd_WorkW, None, "SHELLDLL_DefView", None)
            # print('hwmd_hView: ', hView)
            if not hView:
                continue
            h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
            while h:
                win32gui.SendMessage(h, 0x0010, 0, 0)  # WM_CLOSE
                h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
            break
        return hwnd
    

    桌面覆写:

    我们可以创建一个类,对窗体进行继承,进行视频流加载读取播放。核心代码如下:

    # author: CSDN-Dragon少年
    class MyMainWindow(QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super(MyMainWindow, self).__init__(parent)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            self.player = QMediaPlayer()
            self.player.setNotifyInterval(10000)
            self.player.setVideoOutput(self.ui.videowidget)
            self.player.setMuted(bool(1 - self.player.isMuted()))
            self.setWindowFlags(Qt.FramelessWindowHint)
            self.setupUi(self)
            self.go()
    
    
    	# author: CSDN-Dragon少年
        def go(self):
            self.ui.videowidget.setFullScreen(True)
    
            with open("./filename.txt", 'r', encoding='utf-8') as f:
                file_name = f.read()
                if file_name =='':
                    file_name = 'lkf.mp4'
            print (file_name)
            if not os.path.exists(file_name):
                sys.exit()
            media = QMediaContent(QUrl(file_name))
            self.player.setMedia(media)
            self.mplayList = QMediaPlaylist()
            self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile(file_name)))
            self.player.setPlaylist(self.mplayList)
            self.mplayList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
            win_hwnd = int(self.winId())
            video_h = int(self.ui.videowidget.winId())
            win32gui.SetParent(win_hwnd, h)
            win32gui.SetParent(video_h, h)
            win32gui.SetParent(video_h, win_hwnd)
            self.player.play()
    

    这里我们把上面的py文件直接打包成exe文件,接下来我们在“应用”控件上进行事件绑定,直接调用exe执行,实现动态壁纸播放应用功能。核心代码如下:

    # author: CSDN-Dragon少年
    def play(self):
         if path == '':
             reply = QtWidgets.QMessageBox.question(self, '提示',
                                                    "未加载选择视频",
                                                    QtWidgets.QMessageBox.Yes)
             return
         with open("./filename.txt", 'w', encoding='utf-8') as f:
             f.truncate(0)
             print(f.write(str(path)))
         try:
             try:
                 call('taskkill /F /IM play.exe')
             except:
                 pass
             os.system('start play.exe')
         except:
             pass
         try:
             if self.cap != []:
                 self.cap.release()
                 self.timer_camera.stop()  # 停止计时器
             else:
                 Warming = QMessageBox.warning(self, "Warming", "Push the left upper corner button to Quit.",
                                               QMessageBox.Yes)
         except:
             pass
    

    这样,我们就完成了动态壁纸加载应用功能了,效果如下:
    在这里插入图片描述

    4. 关闭动态壁纸

    最后我们再实现下当前动态壁纸播放关闭功能,我们需要对当前桌面视频播放进行释放取消。代码如下:

    # author:CSDN-Dragon少年
     def close_wall(self):
         try:
             call('taskkill /F /IM play.exe')
         except:
             pass
    

    效果如下:
    在这里插入图片描述

    至此,整个自定义动态桌面壁纸功能就全部完成了,下面我们一起运行下看看动态壁纸效果。

    源码及数据已上传,关注文末公众号回复【源码】即可获取完整源码

    Python往期精彩:

    展开全文
  • win10系统是微软发布的最后一个独立版本,虽然界面比较新颖,但是如果让我们数十年如一日的面对同一个桌面背景。...3、双击打开安装包进行安装,最好不要安装到C盘4、安装完成后,我们双击启动更换动态桌面壁纸的...
    0bfa486d3b5e62a9564e3386c11dc876.png

    win10系统是微软发布的最后一个独立版本,虽然界面比较新颖,但是如果让我们数十年如一日的面对同一个桌面背景。。。闲话不多说,还是看看win10系统是如何设置动态桌面的吧

    1、网页搜索【动态桌面】点进去看看有没有自己喜欢的风格,多找几个,选择下载。

    635ca39a298857685bada7cd7bee34df.png

    2、小编找的这一款,我点击【正式版下载】按钮,下载软件安装包。

    2a77dd64a3d0a3979447a7a231e26642.png

    3、双击打开安装包进行安装,最好不要安装到C盘

    669dfed0bdef7da56a12e7ac10dde7a1.png

    4、安装完成后,我们双击启动更换动态桌面壁纸的软件,软件会自动给我们更换一张动态壁纸。

    24db5e70b02c2236c21094b6934624b3.png

    5、在左侧点击【发现壁纸】,在顶部选择【视频】,在下方找自己喜欢的动态壁纸,可以点击预览图片打开新的页面。

    a70f344b65f353c1231d2dd952bc6264.png

    6、在新的页面中可以预览动态壁纸的效果,如果喜欢,可以直接点击【下载】按钮。

    296c369f8982afcc21c2cf2c66835b12.png

    7、这时提示需要登录账号,我们可以直接用QQ快捷登录,再点击下载就可以了。

    dc5aad0b52ba271d4494de06b3328116.png

    8、现在完成后,在左侧点击【下载的壁纸】,找到下载好的壁纸或者你想使用的动态壁纸,双击就可以应用在桌面壁纸上了。

    995d93528a0a9937c572a05d7d71d64d.png

    以上就是win10系统设置动态桌面的方法了,赶紧添加上自己喜欢的动态壁纸吧

    展开全文
  • iOS启动页加载静态图和动态

    万次阅读 2017-05-17 11:11:46
    相信大家都看过很多app在启动时候会加载一些广告图片,例如微博、淘宝、头条等。下边我们就来实现类似的效果。

    相信大家都看过很多app在启动时候会加载一些广告图片,例如微博、淘宝、头条等。下边我们就来实现类似的效果。

    首先,我们要先拿到项目设置启动页的图片,我们可以给UIImage写个Category代码如下:

    .h文件

    #import <UIKit/UIKit.h>
    @interface UIImage (XLLaunchImage)
    //有两种加载启动页的设置方式 如果使用LaunchScreen.storyboard来设置启动页bIsLaunchImage 设置成NO  如果是使用LaunchImage来设置  bIsLaunchImage 设置成YES
    + (UIImage *)getLaunchImageWithbIsLaunchImage:(BOOL)bIsLaunchImage;
    @end

    .m文件

    + (UIImage *)getLaunchImageWithbIsLaunchImage:(BOOL)bIsLaunchImage
    {
        if (!bIsLaunchImage) {
           // 通过LaunchScreen.StoryBoard加载的本地图片 只需要两张本地图片iPhone 7和 7 plus尺寸的图 取名为LaunchImage@2x.png 和LaunchImage@3x.png
            UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];
            UIImageView * imageView=viewController.view.subviews[0];
            return imageView.image;
        }else{
            //下面是通过LaunchImage 获取的本地图片 需要四张本地图片 放入LaunchImage即可  不包括横屏和竖屏
            NSString *viewOrientation = @"Portrait";
            //    if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
            //        viewOrientation = @"Landscape";
            //    }
            NSString *launchImageName = nil;
            NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
            CGSize viewSize = [UIApplication sharedApplication].keyWindow.bounds.size;
            for (NSDictionary* dict in imagesDict)
            {
                CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
                if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
                {
                    launchImageName = dict[@"UILaunchImageName"];
                }
            }
            return [UIImage imageNamed:launchImageName];
        }
    }

    这边要说明一下,设置启动页有两种方式一种是通过LaunchScreen.storyboard来设置,一种是通过LaunchImage(也就是Launch images source)来设置这两个我们获取的方式是不一样的。

    接着我们要来创建一个View类,用于展示我们自定义的广告图片。代码如下:

    .h文件

    #import <UIKit/UIKit.h>
    #import "FLAnimatedImage.h"
    
    //屏幕高度
    #define kScreenHeight CGRectGetHeight([UIScreen mainScreen].bounds)
    //屏幕宽度
    #define kScreenWidth CGRectGetWidth([UIScreen mainScreen].bounds)
    //跳过按钮宽
    #define kSkipBtnWidth 65
    //跳过按钮高
    #define kSkipBtnHeight 30
    //跳过按钮右边距
    #define kSkipRightEdging 20
    //跳过按钮顶部边距
    #define kSkipTopEdging 40
    //默认广告页面高度
    #define kAdImageViewHeight kScreenHeight-100
    
    @interface XLLaunchView : UIView
    @property (nonatomic, weak) UIImageView *launchImageView;
    
    @property (nonatomic, weak) FLAnimatedImageView *adImageView;
    
    @property (nonatomic, weak) UIButton *skipBtn;
    @end

    .m文件

    #import "XLLaunchView.h"
    @interface XLLaunchView ()
    @end
    @implementation XLLaunchView
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
    
            [self addlaunchImageView];
    
            [self addAdImageView];
    
            [self addSkipBtn];
        }
    
        return self;
    }
    - (void)addlaunchImageView
    {
        UIImageView *imageView = [[UIImageView alloc]init];
        [self addSubview:imageView];
        _launchImageView = imageView;
    }
    
    - (void)addAdImageView
    {
        FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc]init];
        [self addSubview:imageView];
        _adImageView = imageView;
    }
    
    //跳过按钮
    - (void)addSkipBtn
    {
        UIButton *skipBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        skipBtn.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
        [skipBtn setTitle:@"跳过" forState:UIControlStateNormal];
        skipBtn.titleLabel.textColor = [UIColor whiteColor];
        skipBtn.titleLabel.font = [UIFont systemFontOfSize:15];
        skipBtn.alpha = 0.92;
        skipBtn.layer.cornerRadius = 4.0;
        skipBtn.clipsToBounds = YES;
        [self addSubview:skipBtn];
        _skipBtn = skipBtn;
    }
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        _launchImageView.frame = self.bounds;
        _adImageView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight-100);
        _skipBtn.frame = CGRectMake(CGRectGetWidth(self.frame) - kSkipBtnWidth - kSkipRightEdging, kSkipTopEdging, kSkipBtnWidth, kSkipBtnHeight);
    }
    @end

    这边也要说明一下,我们这边图片是通过SDWebImage来进行加载的,而FLAnimatedImage.h这个类是SDWebImage4.0版本以上加载动态图的类,性能比之前的提升了很多,具体的使用这里不多说请点SDWebImage使用

    最后,我们可以创建一个LaunchImageVIew的管理者,方便我们来进行一些对应的操作。代码如下:

    .h文件

    #import <UIKit/UIKit.h>
    
    //广告倒计时间 单位:秒
    #define DURATION 5
    @class XLAdModel;
    @interface XLLaunchViewManager : UIView
    //广告模型
    @property (nonatomic , strong) XLAdModel  *adModel;
    //点击广告图回调
    @property (nonatomic , copy) void(^tapClick) ();
    //创建一个对象
    +(instancetype)launchViewManger;
    //展示对象
    -(void)showView:(UIView *)view;
    @end

    .m文件

    #import "XLLaunchViewManager.h"
    #import "XLLaunchView.h"
    #import "UIImageView+WebCache.h"
    #import "UIImage+XLLaunchImage.h"
    #import "XLAdModel.h"
    #import "FLAnimatedImageView+WebCache.h"
    @interface XLLaunchViewManager ()
    @property (nonatomic, weak) XLLaunchView *launchView;
    @property (nonatomic, strong) dispatch_source_t timer;
    @end
    
    @implementation XLLaunchViewManager
    +(instancetype)launchViewManger
    {
        return [[[ self class]alloc]init];
    }
    
    -(void)showView:(UIView *)view
    {
        self.frame = view.bounds;
        [view addSubview:self];
        [self addADLaunchView];
        [self loadData];
    }
    
    - (void)addADLaunchView
    {
        XLLaunchView *adLaunchView = [[XLLaunchView alloc]init];
        adLaunchView.skipBtn.hidden = YES;
        //有两种加载启动页的设置方式 如果使用LaunchScreen.storyboard来设置启动页bIsLaunchImage 设置成NO  如果是使用LaunchImage来设置  bIsLaunchImage 设置成YES
        adLaunchView.launchImageView.image = [UIImage getLaunchImageWithbIsLaunchImage:YES];
        adLaunchView.frame = self.bounds;
        [adLaunchView.skipBtn addTarget:self action:@selector(skipADAction) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:adLaunchView];
        _launchView = adLaunchView;
    }
    
    //加载数据
    - (void)loadData
    {
        if ( _adModel.launchUrl && _adModel.launchUrl.length>0) {
            [self showADImageWithURL:[NSURL URLWithString:_adModel.launchUrl]];
            UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pushAdController)];
            [_launchView addGestureRecognizer:tap];
        }else{
            [self dismissController];
        }
    }
    
    //设置广告图片
    - (void)showADImageWithURL:(NSURL *)url
    {
        __weak typeof(self) weakSelf = self;
        [_launchView.adImageView  sd_setImageWithURL:url placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
            // 启动倒计时
            [weakSelf scheduledGCDTimer];
        }];
    }
    
    //跳过倒计时
    - (void)showSkipBtnTitleTime:(int)timeLeave
    {
        NSString *timeLeaveStr = [NSString stringWithFormat:@"跳过 %ds",timeLeave];
        [_launchView.skipBtn setTitle:timeLeaveStr forState:UIControlStateNormal];
        _launchView.skipBtn.hidden = NO;
    }
    
    
    - (void)scheduledGCDTimer
    {
        [self cancleGCDTimer];
        __block int timeLeave = DURATION; //倒计时时间
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
        dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
        __typeof (self) __weak weakSelf = self;
        dispatch_source_set_event_handler(_timer, ^{
            if(timeLeave <= 0){ //倒计时结束,关闭
                dispatch_source_cancel(weakSelf.timer);
                dispatch_async(dispatch_get_main_queue(), ^{
                    //关闭界面
                    [self dismissController];
                });
            }else{
                int curTimeLeave = timeLeave;
                dispatch_async(dispatch_get_main_queue(), ^{
                    //设置界面
                    [weakSelf showSkipBtnTitleTime:curTimeLeave];
                });
                --timeLeave;
            }
        });
        dispatch_resume(_timer);
    }
    
    - (void)cancleGCDTimer
    {
        if (_timer) {
            dispatch_source_cancel(_timer);
            _timer = nil;
        }
    }
    
    #pragma mark - action
    
    - (void)skipADAction
    {
        [self dismissController];
    }
    
    - (void)dismissController
    {
        [self cancleGCDTimer];
        //消失动画
        [UIView animateWithDuration:0.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            //缩放修改处
            self.transform = CGAffineTransformMakeScale(1, 1);
            self.alpha = 0.0;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
    }
    
    -(void)pushAdController
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self removeFromSuperview];
          if (self.tapClick) {
                self.tapClick();
            }
        });
    }
    
    - (void)dealloc
    {
        [self cancleGCDTimer];
    }
    
    -(void)show
    {
        [self addADLaunchView];
        [self loadData];
    }
    @end

    这边有个XLAdModel类,这个是广告Model参数如下

    @interface XLAdModel : NSObject
    //启动图广告地址
    @property (nonatomic , copy) NSString *launchUrl;
    //启动图广告详情地址
    @property (nonatomic , copy) NSString *adDetailUrl;
    @end

    到这边我们是准备都完成,接下来就是怎么来使用了,使用代码如下:
    AppDelegate.m文件

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [self addMainWindow];
        [self addADLaunchController];
        return YES;
    }
    
    - (void)addMainWindow
    {
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.window.backgroundColor = [UIColor whiteColor];
        _nav = [[UINavigationController alloc] initWithRootViewController:[[MainViewController alloc] init]];
        self.window.rootViewController = _nav;
        [self.window makeKeyAndVisible];
    }
    
    //加载广告
    - (void)addADLaunchController
    {
        XLAdModel * adModel=[[XLAdModel alloc]init];
        //静态图
    //    adModel.launchUrl = @"http://d.hiphotos.baidu.com/image/pic/item/f7246b600c3387444834846f580fd9f9d72aa034.jpg";
        //动态图
        adModel.launchUrl = @"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=408862874,416826962&fm=23&gp=0.jpg";
    //    //点击跳转链接
        adModel.adDetailUrl = @"http://www.baidu.com";
        UIViewController *rootViewController = self.window.rootViewController;
        XLLaunchViewManager *launchController = [XLLaunchViewManager launchViewManger];
        launchController.adModel = adModel;
        [launchController showView:rootViewController.view];
        __weak typeof(self)weakSelf = self;
        launchController.tapClick =^{
            XLAdViewController * adVc=[[XLAdViewController alloc]init];
            adVc.adModel = adModel;
            adVc.hidesBottomBarWhenPushed=YES;
            [weakSelf.nav pushViewController:adVc animated:YES];
        };
    }

    这边的XLAdViewController是广告的具体详情页面,具体可自己实现。到这边就基本可以完成了,效果如下:

    静态图展示
    动态图展示

    展开全文
  • 话不多说上图片点击图片上我框出来的地方即可进入动态壁纸然后选择自己喜欢的壁纸(说实话壁纸挺少的,毕竟是刚更新出来的,我相信以后会越来越好的,在目前我还没有找到可以上传的按钮,也或许没有吧,如果有发现...
  • IPhone动态壁纸设置主屏幕为什么不会动?苹果手机动态壁纸不动主要是因为一个设定成静态壁纸了,二是设定成主屏壁纸了。只需要将壁纸重新设置为锁屏屏幕壁纸,即可看到live动态壁纸效果了。iphone动态壁纸不动解决...
  • 视频2gif 以编程方式从 Python 中的视频生成动画 GIF 使用此 video2gif 转换器,您可以上传任何格式的视频和富媒体文件,将它们转换为高质量的 GIF 动画。 要求 Python 3.6+、pysimplegui、opencv-python 等常见包...
  • 在制作动态壁纸之前需要用到视频素材,这里可以启动屏幕录制功能来录制一个。3、启动录制功能之后桌面上会有一个录制工具,你可以通过拉伸来改变它的录制范围。将这个录制工具对准你要录制的视频,然后再合适的时间...
  • 这两天在公众号上偶然看到一篇关于设置动态壁纸的文章,觉得蛮有意思的,学习了一下,以此文章记录一下怎样给手机设置静态壁纸动态壁纸,设置壁纸的使用方法。 静态壁纸 设置静态壁纸是通过调用系统...
  • 很多动态的恶搞图片也是这样,明明是个很正常的gif动态图片,但是将gif图片中人物的脸进行变换之后就非常的那个啥了,反正就是怎么好玩怎么来。静态的图片换脸其实不难,动态的可能有很多人就不太清楚怎么操作了,...
  • 如何在桌面截取gif动态

    千次阅读 2019-09-03 23:20:50
    这个窗口中间部分是透明的,可以在窗口中操作下层窗口,这块透明的部分也是最终gif图像显示的部分,这里的下层窗口是网页。左下角用于设置帧率和图片尺寸,右下角Record和Stop用于开始和结束录制,点击Recor...
  • 这种方式是真正的加载动态图,播放gif类型的图片,其原理就是将gif图片播放出来大体上分为四部:第一步:在values文件夹下建立attrs.xml文件,内容如下:第二步:建立一个PowerImageView类继承ImageView类package ...
  • Qt/C++ 360安全卫士主界面动态按钮demo

    千次阅读 2016-05-31 01:44:38
    一,先上最终效果图    由于制不来gif就只能传个hover状态的了,所以看不出实际效果了   二,主要代码:  1.头文件  #include #include
  • CSS或JS实现gif动态图片的停止与播放

    万次阅读 2018-11-13 11:19:40
    我们可以这么处理,就是准备2套图片,一个是gif动态图片,还有一个是只有一帧的静止的图片。然后使用JS来回切换 的 src 值为这两张图片地址就好了。 此方法甚简单,我就不放实例了。 img.src="animate....
  • V2.3用png替换了默认的gif图标,以解决Windows用户报告的图标消失的问题 V2.4不记得发生了什么变化-可能是一个小错误修复V2.5轻微调整,使Goobric的视线也出现在云端硬盘视频项目中 支持语言:English
  • C++动态壁纸软件的开发(含源文件)

    千次阅读 2021-07-30 19:59:46
    = 2) {//高音量 VolumeNowPic = 2; ui->volumePic->setStyleSheet(VOLUME_HIGH); } else if (value > 0 && value != 1) {//低音量 ui->volumePic->setStyleSheet(VOLUME_LOW); VolumeNowPic = 1; } else if (value =...
  • 怎么制作GIF动态图片,如何做GIF

    千次阅读 2019-04-02 17:33:43
    在日常的聊天中使用较为gif比较频繁,但是我们一般使用的都是社交工具中自带的,很少自己会制作属于自己的专属GIF,其实自己...2、在电脑上运行迅捷GIF制作工具,会出现两个选择按钮,如果要截取GIF,点击“启动屏幕...
  • 动态壁纸制作器

    2021-05-21 11:08:42
    动态壁纸制作器 使用方式 1.点击首页下方按钮,选择本地图片 2.选择后自动返回首页,再次点击首页下方按钮,选择本地视频 3.返回后,请稍等几秒钟,制作实况图成功后,会展示在首页中上方。 4.在没有制作过实况图时...
  • QQ中就推出表情了DIY功能,可以将多个表情图片制作成一个动态GIF,那怎么制作表情DIY,动态GIF表情包如何制作呢? 怎么制作表情DIY? 1、在电脑上登录QQ账号,打开任意一个对话框,然后点击QQ表情图标; 2、...
  • 2)注册窗口类:窗口类的名字、提供窗口过程处理函数 (3)创建窗口:CreateWindow(); (4)显示窗口:ShowWindow(); (5)更新窗口:Updatewindow(); (6)消息循环:相当于一个死循环:WM_Cl...
  • //隐藏按钮 } }, cls:"x-btn-text-icon",//添加图标前需要设置该属性 icon:"house.gif", //图标的地址 //plugins : Object/Array 扩展插件时使用 repeat:false, //默认false ,如果为true,需要设置mouseover事件 ...
  • 动态GIF表情怎么制作

    2019-09-25 16:53:04
    聊天是大家每天都在做的事,我们也经常会在社交工具或社交平台上聊天,比如QQ、微信等。但在聊天的时候我们经常用到一些表情图,其中GIF表情图就是用的最多的一种。那么这些GIF表情图都是怎么来...2、运行之后会有一...
  • 怎么在GIF动态图中添加文字

    千次阅读 2019-10-22 16:00:35
    GIF动态图片其实就是多张不同的图片放在一起无限循环播放,在我们的生活中很多地方都可以看到它的身影,而用的最多的地方就是微信和QQ等一些社交软件,人们在聊天的时候总喜欢用GIF动态图来表达自己的意思,这些动态...
  • 易语言图片框GIF播放速度补丁模块源码系统结构:补丁GIF, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮1_被单击 || ||------_编辑框1_内容被改变 ======程序集1 || ||------_启动
  • 金蝶k/3加密服务未启动解决方法

    千次阅读 2021-08-12 11:04:21
    金蝶k/3加密服务未启动解决方法2018-09-17金蝶二次开发 2010-11-04 16:26:03 阅读52 评论0 字号:大中小金蝶k/3加密服务未启动解决方法k3加密服务未启动解决方法K/3V10.3(包括K/3V10.2SP2的加密补丁),对加密的验证...
  • ~~各位大佬好,我是超级超级小白,如有不对的地方请赐教,请不要喷我! 需求描述:在界面中设置一个按钮,打开桌面一个应用程序。...描述:按钮单击是找到你要打开的应用程序目录,在双击按钮,就
  • 抖音表情制作方法 动态GIF怎么玩

    千次阅读 2019-01-02 16:44:34
    抖音表情制作方法 动态GIF怎么玩抖音已然成为我们生活娱乐中必不可少的一部分,不管是在等公交还是走在马路上,低头族中总有很大一部分都在刷抖音,其中抖音一段时间比较火的就是沙漠骆驼,于是相关的表情包就刷爆了...
  • 在我想做的是:装载测试.gif在播放测试.gif在覆盖原来的测试.gif另一个任意动画gif文件单击按钮时让Qmovie重新加载gif显示新的gif下面是我设置的用于尝试此操作的基本代码,但是单击按钮刷新不起作用:import sys...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,926
精华内容 9,570
关键字:

启动按钮 动态gif