「OC」UI练习(二)——照片墙

「OC」UI练习------照片墙

文章目录

UITapGestureRecognizer介绍

UITapGestureRecognizer是UIKit框架中的一个手势识别器类,用于检测用户在视图上的轻击手势。它是UIGestureRecognizer的一个子类,可以通过将它添加到视图上来监听并响应用户的轻击手势。

使用UITapGestureRecognizer,你可以指定轻击手势的触发条件,例如点击次数和触摸点数量。当用户触发了指定条件的轻击手势时,你可以在相应的处理方法中执行自定义的操作。

以下为UITapGestureRecognizer的实际用法

objc 复制代码
#import <UIKit/UIKit.h>
#import "ViewController.h"
#import "JCViewViewController.h"
#import "JCSuperView.h"

@interface ViewController ()

@end

@implementation ViewController

//在第一次加载被使用
- (void)viewDidLoad {
    [super viewDidLoad];
    [self useGesture];
}


-(void)useGesture {
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    
    UIImageView *iview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 300, 400)];
    iview.image = image;
    //是否接受交互,若不开启则无法使用手势
    iview.userInteractionEnabled = YES;
    
    [self.view addSubview:iview];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapToAct:)];
    
    //表示手势识别事件类型:点几次进行触发 ------ 默认值:1
    tap.numberOfTapsRequired = 1;
    
    //表示几个手指同时点击进行触发 ------ 默认值:1
    tap.numberOfTouchesRequired = 1;
    
    [iview addGestureRecognizer:tap];
    
    
    //实现双击缩小
    UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapToact2:)];
    tap2.numberOfTapsRequired = 2;
    tap2.numberOfTouchesRequired = 1;
    [iview addGestureRecognizer:tap2];
    
    //单击操作与双击操作冲突时,单击操作失效
    [tap requireGestureRecognizerToFail:tap2];
}

//双击缩小
-(void)tapToact2:(UITapGestureRecognizer*)tap {
    UIImageView *iview = (UIImageView*)tap.view;
    
    
    //在这中间做的改变都会通过动画的形式进行演示
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    iview.frame = CGRectMake(20, 20, 300, 400);
    
    [UIView commitAnimations];
}

//单击放大
-(void)tapToAct : (UITapGestureRecognizer*) tap {
    //获取手势的监控对象
    NSLog(@"点击");
    UIImageView *iview = (UIImageView*)tap.view;
    
    
    //在这中间做的改变都会通过动画的形式进行演示
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    iview.frame = [UIScreen mainScreen].bounds;
    
    [UIView commitAnimations];
}

照片墙实现

objc 复制代码
#import "SceneDelegate.h"
#import "JCRoot.h"
@interface SceneDelegate ()

@end

@implementation SceneDelegate

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    //导航控制器框架
    self.window.frame = [UIScreen mainScreen].bounds;
  
  //设置导航器
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[JCRoot alloc] init]];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//根视图的.m文件
#import "JCRoot.h"
#import "JCShowPicture.h"
@interface JCRoot ()

@end

@implementation JCRoot

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"照片墙";
    
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(5, 10, 380, 852)];
    sv.backgroundColor = [UIColor orangeColor];
    
    //导航栏不透明
    self.navigationController.navigationBar.translucent = YES;
    //画布大小
    sv.contentSize = CGSizeMake(380, 852 * 1.5);
    
    sv.userInteractionEnabled = YES;
    //修改背景颜色
    self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];
    for (int i = 0; i < 5; i++) {
        NSString *name = [NSString stringWithFormat:@"%d.png", i + 1];
        UIImage *image = [UIImage imageNamed:name];
        
        UIImageView *iv = [[UIImageView alloc] initWithImage:image];
        iv.frame = CGRectMake(0,  i * 170, 380, 160);
        iv.userInteractionEnabled = YES;


        [sv addSubview:iv];
        
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pressTap:)];
        //单次点击
        tap.numberOfTapsRequired = 1;
        //单个手指
        tap.numberOfTouchesRequired = 1;
        //
        
        [iv addGestureRecognizer:tap];
    }
    [self.view addSubview: sv];
}

-(void) pressTap :(UITapGestureRecognizer *)tap {
    NSLog(@"点击触发!");
    UIImageView *iview = [[UIImageView alloc]init];
    iview = (UIImageView*)tap.view;
    
    //创建视图控制器
    JCShowPicture *show = [[JCShowPicture alloc] init];
    show.image = iview.image;
    [self.navigationController pushViewController:show animated:YES];
}
/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//展示栏的相关内容
#import "JCShowPicture.h"

@interface JCShowPicture ()

@end

@implementation JCShowPicture

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"照片";
    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 10, 380, 852)];
    
    _imageView.image = _image;
    
    //视图对象只有一个根视图
    //当我们将视图对象添加至新的父视图上
    //会将该视图对象会从原来的父视图删除
    [self.view addSubview: _imageView];
}

得到的界面如下所示

相关推荐
2501_915918411 分钟前
App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
2501_916007472 小时前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
Pluto5385 小时前
第一个app产品的迭代
ios·github
2501_915921436 小时前
iOS 26 CPU 使用率监控策略 多工具协同构建性能探索体系
android·ios·小程序·https·uni-app·iphone·webview
狂团商城小师妹6 小时前
JAVA国际版同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
android·java·ios·小程序·交友
游戏开发爱好者87 小时前
iOS 应用逆向对抗手段,多工具组合实战(iOS 逆向防护/IPA 混淆/无源码加固/Ipa Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview
AirDroid_cn7 小时前
在 iOS 18 的照片应用,如何批量隐藏截屏?
macos·objective-c·cocoa
00后程序员张7 小时前
iOS 文件管理与导出实战,多工具协同打造高效数据访问与调试体系
android·macos·ios·小程序·uni-app·cocoa·iphone
AirDroid_cn14 小时前
在 iOS 18 中,如何将锁屏底部的 “手电筒” 替换为其他应用?
ios
芝麻开门-新起点20 小时前
Android 和 iOS 系统版本及开发适配
android·ios·cocoa