1. 程式人生 > 實用技巧 >iOS UIScrollView初體驗

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效果差不多