手势操作

视图的形变
tgr.view.transform = CGAffineTransformIdentity;//形变清零

单击手势必须再双击手势识别失败时才识别

//否则一次双击可以同时出发多个手势
[singleTap requireGestureRecognizerToFail:doubleTap];

1.点击手势

UITapGestureRecognizer
//设置点击次数,默认为1
tgr.numberOfTapsRequired = 2;
//设置触摸点数,默认为1
//tgr.numberOfTouchesRequired = 2;


2.长按手势UILongPressGestureRecognizer

//设置最小持续时间
lpgr.minimumPressDuration = 1;


3.滑动手势UIPanGestureRecognizer

注:view上label的移动操作

- (void)panGestureHandle:(UIPanGestureRecognizer *)pgr
{
    switch (pgr.state) {
        case UIGestureRecognizerStateBegan:
        case UIGestureRecognizerStateChanged:
            //NSLog(@"滑动手势识别成功");
        {
            UIView *view = pgr.view;
            CGPoint offset = [pgr translationInView:self.view];
    //用形变量改变位置,在上一次形变量基础之上
            view.transform = CGAffineTransformTranslate(view.transform, offset.x, offset.y);
            **//因为滑动手势效果会累加,所以每次需要清零
            [pgr setTranslation:CGPointZero inView:self.view];**
        }
            break;
        case UIGestureRecognizerStateEnded:
            NSLog(@"滑动手势识别结束");
            break;
        default:
            break;
    }
}

4.捏合手势UIPinchGestureRecognizer

 -(void)pinchGestureHandle:(UIPinchGestureRecognizer *)pgr
{
    switch (pgr.state) {
        case UIGestureRecognizerStateBegan:
        case UIGestureRecognizerStateChanged:
        {
            UIView *view = pgr.view;
            view.transform = CGAffineTransformScale(view.transform, pgr.scale, pgr.scale);
            //缩放比例会累加,所以需要重新复位
            pgr.scale = 1;
        }
            break;
        case UIGestureRecognizerStateEnded:
            NSLog(@"捏合手势结束");
            break;
        default:
            break;
    }    
}

5.旋转手势UIRotationGestureRecognizer

pragma mark - 旋转手势

- (void)rotationGestureHandle:(UIRotationGestureRecognizer *)rgr
{
    switch (rgr.state) {
        case UIGestureRecognizerStateBegan:
        case UIGestureRecognizerStateChanged:
        {
            UIView *view = rgr.view;
            view.transform = CGAffineTransformRotate(view.transform, rgr.rotation);
            //因为旋转弧度会累加,所以需要清零
            rgr.rotation = 0;
        }
            break;

        case UIGestureRecognizerStateEnded:
            NSLog(@"旋转结束");
            break;
        default:
            break;
    }
}

//设置代理,出现手势冲突时可以加以干涉
rgr.delegate = self;

pragma mark - 代理方法

//注:此代理方法解决手势冲突

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    //如果多个手势操作一个视图,返回yes识别
    if (gestureRecognizer.view == otherGestureRecognizer.view) {
        return YES;
    }
    return NO;
}

6.有方向滑动UISwipeGestureRecognizer

//触动方法
注:下面代码实现单方向快速滑过,view上label朝划过的方向移动一定距离,需要设置sgr.direction

- (void)swipeGestureHandle:(UISwipeGestureRecognizer *)sgr
{
#define MOVE_STEP  100
    UIView *view = sgr.view;

    CGPoint offset = CGPointZero;

    switch (sgr.direction) {
        case UISwipeGestureRecognizerDirectionDown:
            offset.y += MOVE_STEP;
            break;
        case UISwipeGestureRecognizerDirectionUp:
            offset.y -= MOVE_STEP;
            break;
        case UISwipeGestureRecognizerDirectionLeft:
            offset.x -= MOVE_STEP;
            break;
        case UISwipeGestureRecognizerDirectionRight:
            offset.x += MOVE_STEP;
            break;
        default:
            break;
    }
    view.transform = CGAffineTransformTranslate(view.transform, offset.x, offset.y);
}

7.摇晃事件

说明:实现类似微信摇一摇功能,声音、动画 并未实现代理方法,使用晃动事件接口监听晃动事件
注:播放短音乐,需导入AudioToolbox.framework系统包,导入#import
(AudioToolbox/AudioToolbox.h)

- (void)playSoundWithName:(NSString *)soundName
{
    NSArray *array = [soundName componentsSeparatedByString:@"."];
    NSString *path = [[NSBundle mainBundle] pathForResource:array[0] ofType:array[1]];
    NSURL *url = [NSURL URLWithString:path];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID);
    AudioServicesPlayAlertSound(soundID);
}
#pragma mark - 晃动事件接口
//晃动开始
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    [super motionBegan:motion withEvent:event];
    //NSLog(@"晃动开始");
    //添加动画
    [self createAnimation];
    //添加音乐
    [self playSoundWithName:@"shake_sound_male.wav"];
}
//晃动结束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"晃动结束");
}
//滑动被取消
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"滑动被取消");
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值