iOS UIScrollView初体验

//
//  AppDelegate.m
//  wzy_ios_demo
//
//  Created by admin on 2020/12/8.
//

#import "AppDelegate.h"
#import "MyUiView.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:
             [[UIScreen mainScreen] bounds]];
    
    CGRect firstFrame = self.window.bounds;
    CGRect bigRect = self.window.bounds;
    bigRect.size.width *= 2;
    
    //两个view,secondView的起始点在firstView右边(即屏幕右侧)
    MyUiView *firstView = [[MyUiView alloc] initWithFrame: firstFrame];
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: firstFrame];
    firstFrame.origin.x += firstFrame.size.width;
    MyUiView *secondView = [[MyUiView alloc] initWithFrame: firstFrame];
    
    //自动吸附到页面对齐
    scrollView.pagingEnabled = YES;
    //指定实际的范围
    scrollView.contentSize = bigRect.size;
    //给scrollView添加两个子view
    [scrollView addSubview: firstView];
    [scrollView addSubview: secondView];
    [self.window addSubview: scrollView];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    //将view绑定到viewController上
    ViewController *controller = [ViewController new];
    [controller.view addSubview: scrollView];
    
    self.window.rootViewController = controller;
    return YES;
}

@end

 

//
//  MyUiView.m
//  wzy_ios_demo
//
//  Created by admin on 2020/12/8.
//

#import "MyUiView.h"

@interface MyUiView ()  //分类

@property (strong, nonatomic) UIColor *circleColor;

@end

@implementation MyUiView

-(instancetype) initWithFrame:(CGRect)frame {
    self = [super initWithFrame: frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        self.circleColor = [UIColor greenColor];
        self.userInteractionEnabled = YES;
    }
    
    return self;
}

-(void) drawRect:(CGRect)rect {
    CGRect bounds = self.bounds;
    CGPoint center;
    center.x = bounds.origin.x + bounds.size.width / 2.0;
    center.y = bounds.origin.y + bounds.size.height / 2.0;
    float radius = MIN(bounds.size.width, bounds.size.height) / 2.0;    //取小的,防止竖屏能放下但横屏放不下
    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path addArcWithCenter: center radius: radius startAngle: 0 endAngle: 2.0 * M_PI clockwise: YES];
    path.lineWidth = 20;
    [self.circleColor setStroke];
    [path stroke];
}

-(void) setCircleColor:(UIColor *)circleColor {
    _circleColor = circleColor;
    [self setNeedsDisplay];
}

-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"%@ was touched", self);
    float red = (arc4random() % 100) / 100.0;
    float blue = (arc4random() % 100) / 100.0;
    float green = (arc4random() % 100) / 100.0;
    UIColor *randomColor = [UIColor colorWithRed: red green:green blue:blue alpha: 1.0];
    
    self.circleColor = randomColor;
}
@end

效果:可以左右拖动,会自动吸附,就和flutter的PageView效果差不多

 

posted @ 2020-12-09 14:25  NeoZy  阅读(192)  评论(0编辑  收藏  举报